diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-80187-ExtFormAddConfirmationFinisherToTheFormEditor.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-80187-ExtFormAddConfirmationFinisherToTheFormEditor.rst
new file mode 100644
index 0000000000000000000000000000000000000000..73f6847e32dce477910b70d9e0f9827a28221784
--- /dev/null
+++ b/typo3/sysext/core/Documentation/Changelog/master/Feature-80187-ExtFormAddConfirmationFinisherToTheFormEditor.rst
@@ -0,0 +1,44 @@
+.. include:: ../../Includes.txt
+
+====================================================================
+Feature: #80187 - Add the "Confirmation" finisher to the form editor
+====================================================================
+
+See :issue:`80187`
+
+Description
+===========
+
+The "Confirmation Message" finisher is now editable through the form editor.
+The "Confirmation Message" finisher is now able to render a content element as message.
+The option "contentElementUid" can be used to render a content element:
+
+.. code-block:: typoscript
+
+    finishers:
+      -
+        identifier: Confirmation
+        options:
+          contentElementUid: 765
+
+If contentElementUid is set, the option "message" will be ignored.
+
+The option "typoscriptObjectPath" can be used to render the content element
+through a typoscript lib (default: 'lib.tx_form.contentElementRendering')
+
+.. code-block:: typoscript
+
+    finishers:
+      -
+        identifier: Confirmation
+        options:
+          contentElementUid: 765
+          typoscriptObjectPath: 'lib.tx_myext.customContentElementRendering'
+
+Impact
+======
+
+The "Confirmation Message" finisher is now editable through the form editor.
+The "Confirmation Message" finisher is now able to render a content element as message.
+
+.. index:: Backend, Frontend, ext:form
\ No newline at end of file
diff --git a/typo3/sysext/form/Classes/Domain/Finishers/ConfirmationFinisher.php b/typo3/sysext/form/Classes/Domain/Finishers/ConfirmationFinisher.php
index 07188b0d69120a1d680472a998d6bf7077043659..4ec6b2a72b5aad27102e1e32f12366272f79a414 100644
--- a/typo3/sysext/form/Classes/Domain/Finishers/ConfirmationFinisher.php
+++ b/typo3/sysext/form/Classes/Domain/Finishers/ConfirmationFinisher.php
@@ -17,7 +17,10 @@ namespace TYPO3\CMS\Form\Domain\Finishers;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
 use TYPO3\CMS\Form\Domain\Finishers\Exception\FinisherException;
+use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
 
 /**
  * A simple finisher that outputs a given text
@@ -47,8 +50,38 @@ class ConfirmationFinisher extends AbstractFinisher
      */
     protected $defaultOptions = [
         'message' => 'The form has been submitted.',
+        'contentElementUid' => 0,
+        'typoscriptObjectPath' => 'lib.tx_form.contentElementRendering'
     ];
 
+    /**
+     * @var array
+     */
+    protected $typoScriptSetup = [];
+
+    /**
+     * @var ConfigurationManagerInterface
+     */
+    protected $configurationManager;
+
+    /**
+     * @param \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager
+     * @return void
+     */
+    public function injectConfigurationManager(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager)
+    {
+        $this->configurationManager = $configurationManager;
+        $this->typoScriptSetup = $this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT);
+    }
+
+    /**
+     * @param ContentObjectRenderer $contentObjectRenderer
+     */
+    public function injectContentObjectRenderer(ContentObjectRenderer $contentObjectRenderer)
+    {
+        $this->contentObjectRenderer = $contentObjectRenderer;
+    }
+
     /**
      * Executes this finisher
      * @see AbstractFinisher::execute()
@@ -58,7 +91,29 @@ class ConfirmationFinisher extends AbstractFinisher
     protected function executeInternal()
     {
         $formRuntime = $this->finisherContext->getFormRuntime();
-        $message = $this->parseOption('message');
+
+        $contentElementUid = (int)$this->parseOption('contentElementUid');
+        $typoscriptObjectPath = $this->parseOption('typoscriptObjectPath');
+        if ($contentElementUid > 0) {
+            $pathSegments = GeneralUtility::trimExplode('.', $typoscriptObjectPath);
+            $lastSegment = array_pop($pathSegments);
+            $setup = $this->typoScriptSetup;
+            foreach ($pathSegments as $segment) {
+                if (!array_key_exists(($segment . '.'), $setup)) {
+                    throw new FinisherException(
+                        sprintf('TypoScript object path "%s" does not exist', $typoscriptObjectPath),
+                        1489238980
+                    );
+                }
+                $setup = $setup[$segment . '.'];
+            }
+            $this->contentObjectRenderer->start([$contentElementUid], '');
+            $this->contentObjectRenderer->setCurrentVal((string)$contentElementUid);
+            $message = $this->contentObjectRenderer->cObjGetSingle($setup[$lastSegment], $setup[$lastSegment . '.']);
+        } else {
+            $message = $this->parseOption('message');
+        }
+
         $formRuntime->getResponse()->setContent($message);
     }
 }
diff --git a/typo3/sysext/form/Configuration/Yaml/BaseSetup.yaml b/typo3/sysext/form/Configuration/Yaml/BaseSetup.yaml
index 821125314f374a457cb2b1db86465d540cc5a83f..99d2e754c10a480736fe45b16fbf9de717c1603a 100644
--- a/typo3/sysext/form/Configuration/Yaml/BaseSetup.yaml
+++ b/typo3/sysext/form/Configuration/Yaml/BaseSetup.yaml
@@ -240,6 +240,8 @@ TYPO3:
               implementationClassName: 'TYPO3\CMS\Form\Domain\Finishers\ConfirmationFinisher'
               #options:
                 #message: ''
+                #contentElementUid: 0
+                #typoscriptObjectPath: 'lib.tx_form.contentElementRendering'
 
             EmailToSender:
               __inheritances:
diff --git a/typo3/sysext/form/Configuration/Yaml/FormEditorSetup.yaml b/typo3/sysext/form/Configuration/Yaml/FormEditorSetup.yaml
index c62d37604e4d6f56878fcdb183c0f832254350d5..c9dbde1e398cc6f67703e3a2b5abf3a82d85d359 100644
--- a/typo3/sysext/form/Configuration/Yaml/FormEditorSetup.yaml
+++ b/typo3/sysext/form/Configuration/Yaml/FormEditorSetup.yaml
@@ -184,6 +184,9 @@ TYPO3:
                       50:
                         value: 'DeleteUploads'
                         label: 'formEditor.elements.Form.editor.finishers.DeleteUploads.label'
+                      60:
+                        value: 'Confirmation'
+                        label: 'formEditor.elements.Form.editor.finishers.Confirmation.label'
 
                 propertyCollections:
                   finishers:
@@ -273,6 +276,23 @@ TYPO3:
                           10: 'TYPO3.CMS.Form.mixins.formElementMixins.BaseCollectionEditorsMixin'
                         100:
                           label: 'formEditor.elements.Form.finisher.Confirmation.editor.header.label'
+                        200:
+                          identifier: 'contentElement'
+                          templateName: 'Inspector-Typo3WinBrowserEditor'
+                          label: 'formEditor.elements.Form.finisher.Confirmation.editor.contentElement.label'
+                          buttonLabel: 'formEditor.elements.Form.finisher.Confirmation.editor.contentElement.buttonLabel'
+                          browsableType: tt_content
+                          propertyPath: 'options.contentElementUid'
+                          propertyValidatorsMode: 'OR'
+                          propertyValidators:
+                            10: 'IntegerOrEmpty'
+                            20: 'FormElementIdentifierWithinCurlyBracesExclusive'
+                        300:
+                          identifier: 'message'
+                          templateName: 'Inspector-TextareaEditor'
+                          label: 'formEditor.elements.Form.finisher.Confirmation.editor.message.label'
+                          propertyPath: 'options.message'
+                          fieldExplanationText: 'formEditor.elements.Form.finisher.Confirmation.editor.message.fieldExplanationText'
 
                     60:
                       identifier: 'Closure'
@@ -725,6 +745,7 @@ TYPO3:
                 predefinedDefaults:
                   options:
                     message: ''
+                    contentElementUid: ''
 
             FlashMessage:
               formEditor:
diff --git a/typo3/sysext/form/Resources/Private/Backend/Partials/FormEditor/Inspector/TextareaEditor.html b/typo3/sysext/form/Resources/Private/Backend/Partials/FormEditor/Inspector/TextareaEditor.html
index 28e65d2c451306b674d21b5b2c3dc1cd39f60612..ab96bbc2c474e689c8867982f7635f9f97ae0031 100644
--- a/typo3/sysext/form/Resources/Private/Backend/Partials/FormEditor/Inspector/TextareaEditor.html
+++ b/typo3/sysext/form/Resources/Private/Backend/Partials/FormEditor/Inspector/TextareaEditor.html
@@ -5,6 +5,7 @@
 		<div class="t3-form-controls" data-identifier="inspectorEditorControlsWrapper">
 			<textarea data-template-property="propertyPath" class="form-control" />
 		</div>
+		<span data-template-property="fieldExplanationText" />
 	</div>
 </div>
 </html>
diff --git a/typo3/sysext/form/Resources/Private/Language/Database.xlf b/typo3/sysext/form/Resources/Private/Language/Database.xlf
index 74bea26e9c24c6e6052a64a6e131f44bb0a0c2fd..fcd844204daa201d5264aa4d0d93d750a9d37e07 100644
--- a/typo3/sysext/form/Resources/Private/Language/Database.xlf
+++ b/typo3/sysext/form/Resources/Private/Language/Database.xlf
@@ -442,6 +442,9 @@
             <trans-unit id="formEditor.elements.Form.editor.finishers.DeleteUploads.label" xml:space="preserve">
                 <source>Delete uploads</source>
             </trans-unit>
+            <trans-unit id="formEditor.elements.Form.editor.finishers.Confirmation.label" xml:space="preserve">
+                <source>Confirmation message</source>
+            </trans-unit>
 
             <trans-unit id="formEditor.elements.Form.finisher.EmailToSender.editor.header.label" xml:space="preserve">
                 <source>Send email (to website visitor)</source>
@@ -569,9 +572,23 @@
             <trans-unit id="formEditor.elements.Form.finisher.DeleteUploads.editor.header.label" xml:space="preserve">
                 <source>Delete uploads</source>
             </trans-unit>
+
             <trans-unit id="formEditor.elements.Form.finisher.Confirmation.editor.header.label" xml:space="preserve">
                 <source>Confirmation message</source>
             </trans-unit>
+            <trans-unit id="formEditor.elements.Form.finisher.Confirmation.editor.contentElement.label" xml:space="preserve">
+                <source>Content element uid</source>
+            </trans-unit>
+            <trans-unit id="formEditor.elements.Form.finisher.Confirmation.editor.contentElement.buttonLabel" xml:space="preserve">
+                <source>tt_content</source>
+            </trans-unit>
+            <trans-unit id="formEditor.elements.Form.finisher.Confirmation.editor.message.label" xml:space="preserve">
+                <source>Text</source>
+            </trans-unit>
+            <trans-unit id="formEditor.elements.Form.finisher.Confirmation.editor.message.fieldExplanationText" xml:space="preserve">
+                <source>Will be ignored if "Content element" is set</source>
+            </trans-unit>
+
             <trans-unit id="formEditor.elements.Form.finisher.Closure.editor.header.label" xml:space="preserve">
                 <source>Execute a closure</source>
             </trans-unit>
diff --git a/typo3/sysext/form/Resources/Public/JavaScript/Backend/FormEditor/InspectorComponent.js b/typo3/sysext/form/Resources/Public/JavaScript/Backend/FormEditor/InspectorComponent.js
index fa1931b8f5150d4b461eecfc8e46169ebab35b5b..e7f6973808cc5b7d493aef9f84a547071204ceab 100644
--- a/typo3/sysext/form/Resources/Public/JavaScript/Backend/FormEditor/InspectorComponent.js
+++ b/typo3/sysext/form/Resources/Public/JavaScript/Backend/FormEditor/InspectorComponent.js
@@ -419,7 +419,7 @@ define(['jquery',
             sortableDomElement.addClass(getHelper().getDomElementClassName('sortable')).sortable({
                 revert: 'true',
                 items: getHelper().getDomElementClassName('collectionElement', true),
-                cancel: getHelper().getDomElementClassName('jQueryUiStateDisabled', true) + ',input,select',
+                cancel: getHelper().getDomElementClassName('jQueryUiStateDisabled', true) + ',input,textarea,select',
                 delay: 200,
                 update: function(e, o) {
                     var dataAttributeName, nextCollectionElementIdentifier, movedCollectionElementIdentifier, previousCollectionElementIdentifier;
diff --git a/typo3/sysext/form/Resources/Public/JavaScript/Backend/FormEditor/ViewModel.js b/typo3/sysext/form/Resources/Public/JavaScript/Backend/FormEditor/ViewModel.js
index cc4813a00c6981aaf7c4e2db29331fe790ae75c4..c162a21bfd3a2657db9a3ca13d3884ff01d0ee75 100644
--- a/typo3/sysext/form/Resources/Public/JavaScript/Backend/FormEditor/ViewModel.js
+++ b/typo3/sysext/form/Resources/Public/JavaScript/Backend/FormEditor/ViewModel.js
@@ -209,6 +209,12 @@ define(['jquery',
                 }
             });
 
+            getFormEditorApp().addPropertyValidationValidator('IntegerOrEmpty', function(formElement, propertyPath) {
+                if (formElement.get(propertyPath).length > 0 && !$.isNumeric(formElement.get(propertyPath))) {
+                    return getFormEditorApp().getFormElementPropertyValidatorDefinition('Integer')['errorMessage'] || 'invalid value';
+                }
+            });
+
             getFormEditorApp().addPropertyValidationValidator('NaiveEmail', function(formElement, propertyPath) {
                 if (!formElement.get(propertyPath).match(/\S+@\S+\.\S+/)) {
                     return getFormEditorApp().getFormElementPropertyValidatorDefinition('NaiveEmail')['errorMessage'] || 'invalid value';