From 2e3c9d5e25e5beadafebca949de3e05eeb6f120a Mon Sep 17 00:00:00 2001
From: Christian Kuhn <lolli@schwarzbu.ch>
Date: Sun, 16 Jun 2013 15:06:31 +0200
Subject: [PATCH] [!!!][TASK] Rewrite install tool

Main features:
* The god class "Installer" is gone and split into two major parts.
A step controller handling major upgrade and install tasks, and a
tool controller handling the known install tool actions.

* The step controller is designed to be always called prior to the
tool controller, if a step needs execution, it comes up, otherwise
the tool controller will be executed.

* The entry point typo3/install/index.php is gone and substituted
by typo3/sysext/install/Start/Install.php. The file contains a
lengthy comment to document the main request flow and used GET/POST
parameters.

* Most parts of the install tool do not bootstrap the whole system
anymore, in general only the base bootstrap, dbal (if loaded),
extbase and fluid ext_localconf.php are loaded. This makes sure
the install tool can not fatal if some extensions ext_localconf
is broken. The whole install tool runs without any caching, so a fatal
in some cache file can not kill the install tool execution.

* Installing TYPO3 CMS on a dbal enabled system is now handled in
the step installer directly to make the according code easier to
understand.

* Rendering is done with a simplified fluid standalone view.

* All install tool forms are CSRF protected.

* A new and fully unit tested class structure is introduced, designed
to take care of the basic file and folder structure of the instance.
It is used during installation to create the needed structure and
can be called in the install tool to compare and fix the current
instance structure with the expected structure. In effect, the
"dummy" package is obsolete. An instance can be created by just
linking index.php, typo3_src/ and typo3/ within the document root,
the installer takes care of creating everything else.

* The installation procedure is released from the package handling.
Packages will be handled by the extension manager after initial
installation with another patch.

Loose ends:
* The whole package handling needs to be implemented in the
extension manager.

* Not all upgrade wizards work, this code area needs some love.

* A 'core' auto updater could be implemented now. A GSoC project
is currently running to realize this.

* The SQL schema migration API is a mess and should be refactored.
For now, another helper class is introduced to encapsulate some
of the nasty details.

* An auto configuration and configuration suggestion system is
planned and needs to be done. It should suggest best configuration
options in the install tool, and should auto configure the system
during installation in the last install step.

* If the backend or frontend fatals due to some extension that
triggers a fatal in ext_localconf or ext_tables (for example
due to a require() of a no longer existing file), a small helper
action in the install tool could find those extensions and suggest
to unload them.

Change-Id: Ice3248caa903449ad6a83ea4f234c7bd125bdb66
Resolves: #49162
Releases: 6.2
Reviewed-on: https://review.typo3.org/21468
Reviewed-by: Anja Leichsenring
Tested-by: Anja Leichsenring
Tested-by: Alexander Opitz
Reviewed-by: Stefan Froemken
Tested-by: Stefan Froemken
Reviewed-by: Christian Kuhn
Tested-by: Christian Kuhn
---
 index.php                                     |    2 +-
 typo3/init.php                                |    2 +-
 typo3/install/README.txt                      |    5 -
 typo3/install/_.htaccess                      |    4 -
 typo3/install/index.php                       |   64 +-
 .../CompatbilityClassLoaderPhpBelow50307.php  |    7 +-
 .../Configuration/ConfigurationManager.php    |   57 +-
 typo3/sysext/core/Classes/Core/Bootstrap.php  |   69 +-
 .../Classes/Core/SystemEnvironmentBuilder.php |    6 -
 .../Classes/Database/DatabaseConnection.php   |    2 +-
 .../core/Classes/Database/SqlParser.php       |    6 +-
 .../InstallToolFormProtection.php             |   15 +-
 .../Classes/Utility/PhpOptionsUtility.php     |    2 +
 .../Configuration/DefaultConfiguration.php    |    3 +-
 .../Configuration/FactoryConfiguration.php    |   10 +
 .../Migrations/Code/LegacyClassesForIde.php   |   41 +-
 .../core/Resources/Private/Font/README.txt    |  146 +-
 .../ConfigurationManagerTest.php              |   28 -
 .../InstallToolFormProtectionTest.php         |    3 +-
 typo3/sysext/dbal/Classes/Autoloader.php      |  109 -
 .../Classes/Database/DatabaseConnection.php   |   18 +-
 .../dbal/Classes/Hooks/InstallToolHooks.php   |  502 --
 .../dbal/Migrations/Code/ClassAliasMap.php    |    3 -
 typo3/sysext/dbal/ext_localconf.php           |    5 -
 .../Classes/Utility/InstallUtility.php        |    6 +-
 .../Classes/CheckTheDatabaseHookInterface.php |   64 -
 .../Classes/Controller/AbstractController.php |  510 ++
 .../Controller/Action/AbstractAction.php      |  211 +
 .../Controller/Action/ActionInterface.php     |   79 +
 .../Common/InstallToolDisabledAction.php      |   44 +
 .../InstallToolPasswordNotSetAction.php       |   44 +
 .../Controller/Action/Common/LoginForm.php    |   45 +
 .../Action/Step/DatabaseConnect.php           |  491 ++
 .../Controller/Action/Step/DatabaseData.php   |  150 +
 .../Controller/Action/Step/DatabaseSelect.php |  159 +
 .../Action/Step/DefaultConfiguration.php      |   90 +
 .../Action/Step/EnvironmentAndFolders.php     |  117 +
 .../Controller/Action/Step/StepInterface.php} |   36 +-
 .../Action/Tool/AllConfiguration.php          |  193 +
 .../Controller/Action/Tool/CleanUp.php        |  285 +
 .../Action/Tool/FolderStructure.php           |   65 +
 .../Action/Tool/ImportantActions.php          |  390 +
 .../Action/Tool/SystemEnvironment.php         |   54 +
 .../Controller/Action/Tool/TestSetup.php      |  617 ++
 .../Controller/Action/Tool/UpdateWizard.php   |  297 +
 .../Controller/Action/Tool/Welcome.php        |   44 +
 .../Controller/BackendModuleController.php    |   89 +
 .../install/Classes/Controller/Exception.php  |   33 +
 .../InstallToolModuleController.php           |  105 -
 .../Classes/Controller/StepController.php     |  319 +
 .../Classes/Controller/ToolController.php     |  127 +
 .../CoreUpdates/ExtensionManagerTables.php    |    6 +-
 .../CoreUpdates/LocalConfigurationUpdate.php  |  147 -
 .../Database/DatabaseConnectionMock.php}      |   64 +-
 typo3/sysext/install/Classes/EidHandler.php   |  127 -
 .../Classes/FolderStructure/AbstractNode.php  |  221 +
 .../FolderStructure/DefaultFactory.php        |  275 +
 .../Classes/FolderStructure/DirectoryNode.php |  283 +
 .../Classes/FolderStructure/Exception.php     |   33 +
 .../Exception/InvalidArgumentException.php    |   33 +
 .../Exception/RootNodeException.php           |   33 +
 .../Classes/FolderStructure/FileNode.php      |  281 +
 .../Classes/FolderStructure/NodeInterface.php |   89 +
 .../Classes/FolderStructure/RootNode.php      |   97 +
 .../FolderStructure/RootNodeInterface.php     |   33 +
 .../FolderStructure/StructureFacade.php       |   68 +
 .../StructureFacadeInterface.php              |   53 +
 .../install/Classes/InstallBootstrap.php      |  148 -
 typo3/sysext/install/Classes/Installer.php    | 6597 -----------------
 .../Interfaces/CheckTheDatabaseHook.php       |    8 -
 .../Classes/Report/InstallStatusReport.php    |   24 +-
 .../install/Classes/Service/BasicService.php  |    8 -
 .../{ => Service}/EnableFileService.php       |   34 +-
 .../SessionService.php}                       |  102 +-
 .../Service/SqlExpectedSchemaService.php      |  131 +
 .../SqlSchemaMigrationService.php}            |   16 +-
 .../Service/UpdateDispatcherService.php       |  137 -
 .../install/Classes/Status/StatusUtility.php  |   47 +-
 .../Classes/SystemEnvironment/Check.php       |  103 +-
 typo3/sysext/install/Classes/Updates/Base.php |    8 -
 .../Updates/File/FilemountUpdateWizard.php    |    8 -
 .../Classes/Updates/File/InitUpdateWizard.php |    8 -
 .../Updates/File/TceformsUpdateWizard.php     |    8 -
 .../File/TtContentUploadsUpdateWizard.php     |    8 -
 .../Classes/Updates/InitUpdateWizard.php      |    4 +-
 .../Classes/Updates/TceformsUpdateWizard.php  |    3 +-
 .../install/Classes/View/StandaloneView.php   |   56 +
 .../ViewHelpers/Be/ContainerViewHelper.php    |  126 +
 .../ViewHelpers/ConstantViewHelper.php        |   43 +
 .../install/Classes/ViewHelpers/Exception.php |   33 +
 .../File/ImageDimensionViewHelper.php         |   72 +
 .../File/RelativePathViewHelper.php           |   52 +
 .../ViewHelpers/File/SizeViewHelper.php       |   66 +
 .../ViewHelpers/Format/CropViewHelper.php     |   68 +
 .../Format/ImageMagickCommandsViewHelper.php  |   51 +
 .../install/Migrations/Code/ClassAliasMap.php |   13 +-
 .../install/Resources/Private/Font/README.txt |  137 +
 .../install/Resources/Private/Font/vera.ttf   |  Bin 0 -> 65932 bytes
 .../Private/Language/BackendModule.xlf}       |    0
 .../Private/Language/Report/locallang.xlf     |   36 +
 .../Private/Layouts/BackendModule.html        |   31 +
 .../Resources/Private/Layouts/Step.html       |   36 +
 .../Private/Layouts/ToolAuthenticated.html    |   54 +
 .../Partials/Action/Common/Copyright.html     |   17 +
 .../Private/Partials/Action/Common/Head.html  |    2 +
 .../Partials/Action/Common/Headers.html       |    5 +
 .../Action/Common/HiddenFormFields.html       |    4 +
 .../Private/Partials/Action/Common/Left.html  |   57 +
 .../Partials/Action/Common/LoginForm.html     |   40 +
 .../Partials/Action/Common/StatusMessage.html |    8 +
 .../Partials/Action/Common/SubmitButton.html  |   13 +
 .../Step/DatabaseConnect/ConnectDetails.html  |   66 +
 .../DatabaseConnect/DbalDriverSelection.html  |   45 +
 .../Action/Step/DatabaseConnect/LoadDbal.html |   16 +
 .../Step/DatabaseConnect/UnloadDbal.html      |    9 +
 .../Tool/AllConfiguration/SubSection.html     |   61 +
 .../Action/Tool/CleanUp/ClearTables.html      |   39 +
 .../Tool/CleanUp/ResetBackendUserUc.html      |   19 +
 .../Action/Tool/CleanUp/Typo3TempFiles.html   |  113 +
 .../Tool/ImportantActions/ChangeSiteName.html |   19 +
 .../ImportantActions/CreateAdministrator.html |   40 +
 .../DatabaseAnalyzerButton.html               |   12 +
 .../DatabaseAnalyzerData.html                 |   85 +
 .../DatabaseAnalyzerSuggestion.html           |   25 +
 .../NewInstallToolPassword.html               |   27 +
 .../ImportantActions/SetNewEncryptionKey.html |   11 +
 .../ImportantActions/SystemInformation.html   |   22 +
 .../Tool/TestSetup/AboutImageHandling.html    |   60 +
 .../Tool/TestSetup/CombiningImages.html       |   34 +
 .../TestSetup/ConvertImageFormatsToJpg.html   |   45 +
 .../Tool/TestSetup/CurrentConfiguration.html  |   81 +
 .../Tool/TestSetup/DisplayTwinImage.html      |   72 +
 .../Partials/Action/Tool/TestSetup/Gdlib.html |   29 +
 .../Partials/Action/Tool/TestSetup/Mail.html  |   28 +
 .../Action/Tool/TestSetup/ScalingImages.html  |   28 +
 .../Tool/TestSetup/TrueTypeFontDpi.html       |   10 +
 .../Tool/TestSetup/VerifyTestResults.html     |   23 +
 .../Action/Tool/TestSetup/WriteGifAndPng.html |   31 +
 .../Tool/UpdateWizard/GetUserInput.html       |   22 +
 .../Action/Tool/UpdateWizard/ListUpdates.html |   42 +
 .../Tool/UpdateWizard/PerformUpdate.html      |   32 +
 .../Action/Common/InstallToolDisabled.html    |   34 +
 .../Common/InstallToolPasswordNotSet.html     |   23 +
 .../Templates/Action/Common/Login.html        |   51 +
 .../Action/Step/DatabaseConnect.html          |   27 +
 .../Templates/Action/Step/DatabaseData.html   |   66 +
 .../Templates/Action/Step/DatabaseSelect.html |   70 +
 .../Action/Step/DefaultConfiguration.html     |   23 +
 .../Action/Step/EnvironmentAndFolders.html    |   68 +
 .../Action/Tool/AllConfiguration.html         |   54 +
 .../Templates/Action/Tool/CleanUp.html        |   21 +
 .../Action/Tool/FolderStructure.html          |   44 +
 .../Action/Tool/ImportantActions.html         |   35 +
 .../Action/Tool/SystemEnvironment.html        |   13 +
 .../Templates/Action/Tool/TestSetup.html      |   32 +
 .../Templates/Action/Tool/UpdateWizard.html   |   25 +
 .../Templates/Action/Tool/Welcome.html        |  146 +
 .../Private/Templates/AlterPasswordForm.html  |   40 -
 .../Templates/BackendModule/Index.html        |    1 +
 .../ShowEnableInstallToolButton.html          |   27 +
 .../Private/Templates/CheckImageMagick.html   |   51 -
 .../Private/Templates/CheckMail.html          |   35 -
 .../Templates/CheckTheDatabaseAdminUser.html  |   35 -
 .../Templates/CheckTheDatabaseCache.html      |   48 -
 .../Templates/CheckTheDatabaseImport.html     |   50 -
 .../Templates/CheckTheDatabaseMenu.html       |  117 -
 .../Private/Templates/CheckTheDatabaseUc.html |   23 -
 .../Private/Templates/CleanUpManager.html     |   44 -
 .../Private/Templates/DisplayFieldComp.html   |   45 -
 .../Private/Templates/DisplayFields.html      |   39 -
 .../Private/Templates/DisplaySuggestions.html |   53 -
 .../Private/Templates/DisplayTwinImage.html   |   91 -
 .../Private/Templates/GenerateConfigForm.html |   41 -
 .../GenerateUpdateDatabaseFormCheckboxes.html |   52 -
 .../Templates/GetUpdateDbFormWrap.html        |   35 -
 .../Private/Templates/ImageMenu.html          |   24 -
 .../Private/Templates/InitExtConfig.html      |   32 -
 .../Resources/Private/Templates/Install.html  |   70 -
 .../Private/Templates/Install_123.html        |   51 -
 .../Private/Templates/Install_login.html      |   21 -
 .../Private/Templates/LoginForm.html          |   62 -
 .../Resources/Private/Templates/Notice.html   |   23 -
 .../Private/Templates/PhpInformation.html     |   25 -
 .../Resources/Private/Templates/PrintAll.html |   23 -
 .../Private/Templates/PrintSection.html       |   19 -
 .../Private/Templates/SetupGeneral.html       |  257 -
 .../Private/Templates/StepHeader.html         |   24 -
 .../Private/Templates/StepOutput.html         |  172 -
 .../Private/Templates/Typo3ConfEdit.html      |  101 -
 .../Private/Templates/Typo3TempManager.html   |   73 -
 .../Private/Templates/UpdateWizardParts.html  |  157 -
 .../Private/Templates/ViewArray.html          |   25 -
 .../Templates/WriteToLocalConfControl.html    |   39 -
 .../Body.jpg}                                 |  Bin
 .../Button.jpg}                               |  Bin
 .../ButtonHover.jpg}                          |  Bin
 .../Content.jpg}                              |  Bin
 .../ContentBottom.png}                        |  Bin
 .../ContentTop.png}                           |  Bin
 .../Images/{logo.gif => Background/Logo.gif}  |  Bin
 .../Menu.gif}                                 |  Bin
 .../Public/Images/Icon/BackendModule.gif}     |  Bin 603 -> 601 bytes
 .../Resources/Public/Images/Icon/Error.png    |  Bin 0 -> 671 bytes
 .../Public/Images/Icon/Information.png        |  Bin 0 -> 724 bytes
 .../LoginIconKey.gif}                         |  Bin
 .../Resources/Public/Images/Icon/Notice.png   |  Bin 0 -> 487 bytes
 .../Ok.png}                                   |  Bin
 .../Resources/Public/Images/Icon/Warning.png  |  Bin 0 -> 619 bytes
 .../AllConfiguration.png}                     |  Bin
 .../{menuCleanup.png => Menu/CleanUp.png}     |  Bin
 .../Public/Images/Menu/FolderStructure.png    |  Bin 0 -> 152 bytes
 .../ImportantActions.png}                     |  Bin
 .../Resources/Public/Images/Menu/Logout.gif   |  Bin 0 -> 579 bytes
 .../Public/Images/Menu/SystemEnvironment.png  |  Bin 0 -> 726 bytes
 .../{menuImages.png => Menu/TestSetup.png}    |  Bin
 .../{menuUpdate.png => Menu/UpdateWizard.png} |  Bin
 .../{menuAbout.png => Menu/Welcome.png}       |  Bin
 .../Images/TestInput/BackgroundCombine.jpg}   |  Bin
 .../Images/TestInput/BackgroundGreen.gif}     |  Bin
 .../Images/TestInput/MaskBlackWhite.gif}      |  Bin
 .../Public/Images/TestInput/MaskCombine.jpg}  |  Bin
 .../Public/Images/TestInput/Test.ai}          |    0
 .../Public/Images/TestInput/Test.bmp}         |  Bin
 .../Public/Images/TestInput/Test.gif}         |  Bin
 .../Public/Images/TestInput/Test.jpg}         |  Bin
 .../Public/Images/TestInput/Test.pcx}         |  Bin
 .../Public/Images/TestInput/Test.pdf}         |    0
 .../Public/Images/TestInput/Test.png}         |  Bin
 .../Public/Images/TestInput/Test.tga}         |  Bin
 .../Public/Images/TestInput/Test.tif}         |  Bin
 .../Public/Images/TestInput/Transparent.gif}  |  Bin
 .../Public/Images/TestInput/Transparent.png}  |  Bin
 .../Public/Images/TestReference/About.txt     |   33 +
 .../Images/TestReference/Combine-1.jpg}       |  Bin
 .../Images/TestReference/Combine-2.jpg}       |  Bin
 .../Public/Images/TestReference/Font.gif      |  Bin 0 -> 732 bytes
 .../Images/TestReference/Gdlib-box.gif}       |  Bin
 .../Images/TestReference/Gdlib-box.png}       |  Bin
 .../Images/TestReference/Gdlib-niceText.gif}  |  Bin
 .../Images/TestReference/Gdlib-niceText.png}  |  Bin
 .../Images/TestReference/Gdlib-shadow.gif}    |  Bin
 .../Images/TestReference/Gdlib-shadow.png}    |  Bin
 .../Images/TestReference/Gdlib-simple.gif}    |  Bin
 .../Images/TestReference/Gdlib-simple.png}    |  Bin
 .../Images/TestReference/Gdlib-text.gif}      |  Bin
 .../Images/TestReference/Gdlib-text.png}      |  Bin
 .../Public/Images/TestReference/Read-ai.jpg}  |  Bin
 .../Public/Images/TestReference/Read-bmp.jpg} |  Bin
 .../Public/Images/TestReference/Read-gif.jpg} |  Bin
 .../Public/Images/TestReference/Read-jpg.jpg} |  Bin
 .../Public/Images/TestReference/Read-pcx.jpg} |  Bin
 .../Public/Images/TestReference/Read-pdf.jpg} |  Bin
 .../Public/Images/TestReference/Read-png.jpg} |  Bin
 .../Public/Images/TestReference/Read-tga.jpg} |  Bin
 .../Public/Images/TestReference/Read-tif.jpg} |  Bin
 .../Images/TestReference/Scale-gif.gif}       |  Bin
 .../Images/TestReference/Scale-jpg.jpg}       |  Bin
 .../Images/TestReference/Scale-png.png}       |  Bin
 .../Images/TestReference/Write-gif.gif}       |  Bin
 .../Images/TestReference/Write-png.png}       |  Bin
 .../Public/Images/input-background.gif        |  Bin 59 -> 0 bytes
 .../Resources/Public/Images/menuDatabase.png  |  Bin 448 -> 0 bytes
 .../Resources/Public/Images/menuPhpinfo.png   |  Bin 479 -> 0 bytes
 .../Public/Images/menuTypo3confEdit.png       |  Bin 392 -> 0 bytes
 .../Resources/Public/Images/menuTypo3temp.png |  Bin 608 -> 0 bytes
 .../Resources/Public/Images/numbers.png       |  Bin 3734 -> 0 bytes
 .../Resources/Public/Javascript/Install.js    |   60 +
 .../Resources/Public/Javascript/install.js    |   49 -
 .../Stylesheets/Action/Common/EarlyExit.css}  |   30 +-
 .../Stylesheets/Action/Common/Install.css     |  616 ++
 .../Common/Login.css}                         |    2 +-
 .../{general.css => Action/Step/General.css}  |  269 +-
 .../ShowEnableInstallToolButton.css           |   33 +
 .../Resources/Public/Stylesheets/ie7.css      |   12 -
 .../Resources/Public/Stylesheets/install.css  |  479 --
 .../Public/Stylesheets/install_123.css        |  215 -
 .../Resources/Public/Stylesheets/reset.css    |   55 -
 typo3/sysext/install/Start/Install.php        |  126 +
 .../Unit/FolderStructure/AbstractNodeTest.php |  370 +
 .../FolderStructure/DefaultFactoryTest.php    |   39 +
 .../FolderStructure/DirectoryNodeTest.php     |  663 ++
 .../Unit/FolderStructure/FileNodeTest.php     |  725 ++
 .../Unit/FolderStructure/RootNodeTest.php     |  264 +
 .../FolderStructure/StructureFacadeTest.php   |   57 +
 .../install/Tests/Unit/InstallToolTest.php    |   81 -
 .../SqlSchemaMigrationServiceTest.php}        |   12 +-
 .../Tests/Unit/Status/StatusUtilityTest.php   |   42 -
 typo3/sysext/install/ext_autoload.php         |   14 -
 typo3/sysext/install/ext_icon.gif             |  Bin
 typo3/sysext/install/ext_localconf.php        |    4 -
 typo3/sysext/install/ext_tables.php           |   17 +-
 typo3/sysext/install/imgs/copyrights.txt      |    5 -
 typo3/sysext/install/imgs/jesus.gif           |  Bin 21791 -> 0 bytes
 typo3/sysext/install/imgs/jesus.png           |  Bin 18952 -> 0 bytes
 typo3/sysext/install/mod/class.tx_install.php |   57 -
 .../install/mod/class.tx_install_ajax.php     |   13 -
 .../install/mod/class.tx_install_session.php  |    8 -
 typo3/sysext/install/mod/clear.gif            |  Bin 46 -> 0 bytes
 typo3/sysext/install/mod/conf.php             |   10 -
 typo3/sysext/install/mod/mod_styles.css       |   42 -
 typo3/sysext/install/mod/mod_template.html    |   31 -
 .../class.tx_install_report_installstatus.php |    8 -
 typo3/sysext/install/report/locallang.xlf     |   44 -
 ...class.tx_coreupdates_addflexformstoacl.php |    8 -
 .../class.tx_coreupdates_charsetdefaults.php  |    8 -
 .../class.tx_coreupdates_compatversion.php    |    8 -
 .../class.tx_coreupdates_compressionlevel.php |    8 -
 .../updates/class.tx_coreupdates_cscsplit.php |    8 -
 .../class.tx_coreupdates_flagsfromsprite.php  |    8 -
 .../class.tx_coreupdates_imagelink.php        |    8 -
 .../class.tx_coreupdates_imagescols.php       |    8 -
 .../class.tx_coreupdates_installsysexts.php   |    8 -
 ...lass.tx_coreupdates_localconfiguration.php |    8 -
 .../class.tx_coreupdates_mediaflexform.php    |    8 -
 .../class.tx_coreupdates_mergeadvanced.php    |    8 -
 ...class.tx_coreupdates_migrateworkspaces.php |    8 -
 .../class.tx_coreupdates_notinmenu.php        |    8 -
 .../updates/class.tx_coreupdates_t3skin.php   |    8 -
 typo3/sysext/install/verify_imgs/readme.txt   |   36 -
 319 files changed, 12487 insertions(+), 12095 deletions(-)
 delete mode 100755 typo3/install/README.txt
 delete mode 100755 typo3/install/_.htaccess
 mode change 100755 => 100644 typo3/install/index.php
 delete mode 100644 typo3/sysext/dbal/Classes/Autoloader.php
 delete mode 100644 typo3/sysext/dbal/Classes/Hooks/InstallToolHooks.php
 delete mode 100644 typo3/sysext/install/Classes/CheckTheDatabaseHookInterface.php
 create mode 100644 typo3/sysext/install/Classes/Controller/AbstractController.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/AbstractAction.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/ActionInterface.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Common/InstallToolDisabledAction.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Common/InstallToolPasswordNotSetAction.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Common/LoginForm.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Step/DatabaseConnect.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Step/DatabaseData.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Step/DatabaseSelect.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Step/DefaultConfiguration.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Step/EnvironmentAndFolders.php
 rename typo3/sysext/install/{mod/index.php => Classes/Controller/Action/Step/StepInterface.php} (54%)
 mode change 100755 => 100644
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/AllConfiguration.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/CleanUp.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/FolderStructure.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/ImportantActions.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/SystemEnvironment.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/TestSetup.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/UpdateWizard.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/Welcome.php
 create mode 100644 typo3/sysext/install/Classes/Controller/BackendModuleController.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Exception.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/InstallToolModuleController.php
 create mode 100644 typo3/sysext/install/Classes/Controller/StepController.php
 create mode 100644 typo3/sysext/install/Classes/Controller/ToolController.php
 delete mode 100644 typo3/sysext/install/Classes/CoreUpdates/LocalConfigurationUpdate.php
 rename typo3/sysext/{dbal/Classes/ExtensionManager/MessageDisplay.php => install/Classes/Database/DatabaseConnectionMock.php} (51%)
 delete mode 100644 typo3/sysext/install/Classes/EidHandler.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/AbstractNode.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/DirectoryNode.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/Exception.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/Exception/InvalidArgumentException.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/Exception/RootNodeException.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/FileNode.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/NodeInterface.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/RootNode.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/RootNodeInterface.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/StructureFacade.php
 create mode 100644 typo3/sysext/install/Classes/FolderStructure/StructureFacadeInterface.php
 delete mode 100644 typo3/sysext/install/Classes/InstallBootstrap.php
 delete mode 100644 typo3/sysext/install/Classes/Installer.php
 delete mode 100644 typo3/sysext/install/Classes/Interfaces/CheckTheDatabaseHook.php
 delete mode 100644 typo3/sysext/install/Classes/Service/BasicService.php
 rename typo3/sysext/install/Classes/{ => Service}/EnableFileService.php (78%)
 rename typo3/sysext/install/Classes/{Session.php => Service/SessionService.php} (79%)
 create mode 100644 typo3/sysext/install/Classes/Service/SqlExpectedSchemaService.php
 rename typo3/sysext/install/Classes/{Sql/SchemaMigrator.php => Service/SqlSchemaMigrationService.php} (99%)
 delete mode 100644 typo3/sysext/install/Classes/Service/UpdateDispatcherService.php
 delete mode 100644 typo3/sysext/install/Classes/Updates/Base.php
 delete mode 100644 typo3/sysext/install/Classes/Updates/File/FilemountUpdateWizard.php
 delete mode 100644 typo3/sysext/install/Classes/Updates/File/InitUpdateWizard.php
 delete mode 100644 typo3/sysext/install/Classes/Updates/File/TceformsUpdateWizard.php
 delete mode 100644 typo3/sysext/install/Classes/Updates/File/TtContentUploadsUpdateWizard.php
 create mode 100644 typo3/sysext/install/Classes/View/StandaloneView.php
 create mode 100644 typo3/sysext/install/Classes/ViewHelpers/Be/ContainerViewHelper.php
 create mode 100644 typo3/sysext/install/Classes/ViewHelpers/ConstantViewHelper.php
 create mode 100644 typo3/sysext/install/Classes/ViewHelpers/Exception.php
 create mode 100644 typo3/sysext/install/Classes/ViewHelpers/File/ImageDimensionViewHelper.php
 create mode 100644 typo3/sysext/install/Classes/ViewHelpers/File/RelativePathViewHelper.php
 create mode 100644 typo3/sysext/install/Classes/ViewHelpers/File/SizeViewHelper.php
 create mode 100644 typo3/sysext/install/Classes/ViewHelpers/Format/CropViewHelper.php
 create mode 100644 typo3/sysext/install/Classes/ViewHelpers/Format/ImageMagickCommandsViewHelper.php
 create mode 100644 typo3/sysext/install/Resources/Private/Font/README.txt
 create mode 100644 typo3/sysext/install/Resources/Private/Font/vera.ttf
 rename typo3/sysext/install/{mod/locallang_mod.xlf => Resources/Private/Language/BackendModule.xlf} (100%)
 create mode 100644 typo3/sysext/install/Resources/Private/Layouts/BackendModule.html
 create mode 100644 typo3/sysext/install/Resources/Private/Layouts/Step.html
 create mode 100644 typo3/sysext/install/Resources/Private/Layouts/ToolAuthenticated.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/Copyright.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/Head.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/Headers.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/HiddenFormFields.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/Left.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/LoginForm.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/StatusMessage.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/SubmitButton.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/ConnectDetails.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/DbalDriverSelection.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/LoadDbal.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/UnloadDbal.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/AllConfiguration/SubSection.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ClearTables.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ResetBackendUserUc.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/Typo3TempFiles.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ChangeSiteName.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CreateAdministrator.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerButton.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerData.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/NewInstallToolPassword.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/SetNewEncryptionKey.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/SystemInformation.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/AboutImageHandling.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CombiningImages.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ConvertImageFormatsToJpg.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CurrentConfiguration.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/DisplayTwinImage.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Gdlib.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Mail.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ScalingImages.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/TrueTypeFontDpi.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/VerifyTestResults.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/WriteGifAndPng.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/GetUserInput.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/ListUpdates.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/PerformUpdate.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Common/InstallToolDisabled.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Common/InstallToolPasswordNotSet.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Common/Login.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseConnect.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseData.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseSelect.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Step/DefaultConfiguration.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Step/EnvironmentAndFolders.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/AllConfiguration.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/CleanUp.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/FolderStructure.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/ImportantActions.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/SystemEnvironment.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/TestSetup.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpdateWizard.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/Welcome.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/AlterPasswordForm.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/BackendModule/Index.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/BackendModule/ShowEnableInstallToolButton.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/CheckImageMagick.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/CheckMail.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseAdminUser.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseCache.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseImport.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseMenu.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseUc.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/CleanUpManager.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/DisplayFieldComp.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/DisplayFields.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/DisplaySuggestions.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/DisplayTwinImage.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/GenerateConfigForm.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/GenerateUpdateDatabaseFormCheckboxes.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/GetUpdateDbFormWrap.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/ImageMenu.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/InitExtConfig.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Install.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Install_123.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Install_login.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/LoginForm.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Notice.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/PhpInformation.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/PrintAll.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/PrintSection.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/SetupGeneral.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/StepHeader.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/StepOutput.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Typo3ConfEdit.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Typo3TempManager.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/UpdateWizardParts.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/ViewArray.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/WriteToLocalConfControl.html
 rename typo3/sysext/install/Resources/Public/Images/{body-background.jpg => Background/Body.jpg} (100%)
 rename typo3/sysext/install/Resources/Public/Images/{button-background.jpg => Background/Button.jpg} (100%)
 rename typo3/sysext/install/Resources/Public/Images/{button-background-hover.jpg => Background/ButtonHover.jpg} (100%)
 rename typo3/sysext/install/Resources/Public/Images/{content-background.jpg => Background/Content.jpg} (100%)
 rename typo3/sysext/install/Resources/Public/Images/{content-bottom.png => Background/ContentBottom.png} (100%)
 rename typo3/sysext/install/Resources/Public/Images/{content-top.png => Background/ContentTop.png} (100%)
 rename typo3/sysext/install/Resources/Public/Images/{logo.gif => Background/Logo.gif} (100%)
 rename typo3/sysext/install/Resources/Public/Images/{menuBackground.gif => Background/Menu.gif} (100%)
 rename typo3/sysext/install/{mod/install.gif => Resources/Public/Images/Icon/BackendModule.gif} (58%)
 create mode 100644 typo3/sysext/install/Resources/Public/Images/Icon/Error.png
 create mode 100644 typo3/sysext/install/Resources/Public/Images/Icon/Information.png
 rename typo3/sysext/install/Resources/Public/Images/{login-icon-key.gif => Icon/LoginIconKey.gif} (100%)
 create mode 100644 typo3/sysext/install/Resources/Public/Images/Icon/Notice.png
 rename typo3/sysext/install/Resources/Public/Images/{menuSystemEnvironment.png => Icon/Ok.png} (100%)
 create mode 100644 typo3/sysext/install/Resources/Public/Images/Icon/Warning.png
 rename typo3/sysext/install/Resources/Public/Images/{menuExtConfig.png => Menu/AllConfiguration.png} (100%)
 rename typo3/sysext/install/Resources/Public/Images/{menuCleanup.png => Menu/CleanUp.png} (100%)
 create mode 100644 typo3/sysext/install/Resources/Public/Images/Menu/FolderStructure.png
 rename typo3/sysext/install/Resources/Public/Images/{menuConfig.png => Menu/ImportantActions.png} (100%)
 create mode 100644 typo3/sysext/install/Resources/Public/Images/Menu/Logout.gif
 create mode 100644 typo3/sysext/install/Resources/Public/Images/Menu/SystemEnvironment.png
 rename typo3/sysext/install/Resources/Public/Images/{menuImages.png => Menu/TestSetup.png} (100%)
 rename typo3/sysext/install/Resources/Public/Images/{menuUpdate.png => Menu/UpdateWizard.png} (100%)
 rename typo3/sysext/install/Resources/Public/Images/{menuAbout.png => Menu/Welcome.png} (100%)
 rename typo3/sysext/install/{imgs/combine_back.jpg => Resources/Public/Images/TestInput/BackgroundCombine.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/greenback.gif => Resources/Public/Images/TestInput/BackgroundGreen.gif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/blackwhite_mask.gif => Resources/Public/Images/TestInput/MaskBlackWhite.gif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/combine_mask.jpg => Resources/Public/Images/TestInput/MaskCombine.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/typo3logotype.ai => Resources/Public/Images/TestInput/Test.ai} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/jesus.bmp => Resources/Public/Images/TestInput/Test.bmp} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{Classes/SystemEnvironment/TestImages/jesus.gif => Resources/Public/Images/TestInput/Test.gif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/jesus.jpg => Resources/Public/Images/TestInput/Test.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/jesus.pcx => Resources/Public/Images/TestInput/Test.pcx} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/pdf_from_imagemagick.pdf => Resources/Public/Images/TestInput/Test.pdf} (100%)
 rename typo3/sysext/install/{Classes/SystemEnvironment/TestImages/jesus.png => Resources/Public/Images/TestInput/Test.png} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/jesus.tga => Resources/Public/Images/TestInput/Test.tga} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/jesus.tif => Resources/Public/Images/TestInput/Test.tif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/jesus2_transp.gif => Resources/Public/Images/TestInput/Transparent.gif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{imgs/jesus2_transp.png => Resources/Public/Images/TestInput/Transparent.png} (100%)
 mode change 100755 => 100644
 create mode 100644 typo3/sysext/install/Resources/Public/Images/TestReference/About.txt
 rename typo3/sysext/install/{verify_imgs/install_44f1273ab1.jpg => Resources/Public/Images/TestReference/Combine-1.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_fcaf26c521.jpg => Resources/Public/Images/TestReference/Combine-2.jpg} (100%)
 mode change 100755 => 100644
 create mode 100644 typo3/sysext/install/Resources/Public/Images/TestReference/Font.gif
 rename typo3/sysext/install/{verify_imgs/install_d1fa76faad.gif => Resources/Public/Images/TestReference/Gdlib-box.gif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_d1fa76faad.png => Resources/Public/Images/TestReference/Gdlib-box.png} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_48784f637a.gif => Resources/Public/Images/TestReference/Gdlib-niceText.gif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_48784f637a.png => Resources/Public/Images/TestReference/Gdlib-niceText.png} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_fe1e67e805.gif => Resources/Public/Images/TestReference/Gdlib-shadow.gif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_fe1e67e805.png => Resources/Public/Images/TestReference/Gdlib-shadow.png} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_f6b0cedc4d.gif => Resources/Public/Images/TestReference/Gdlib-simple.gif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_f6b0cedc4d.png => Resources/Public/Images/TestReference/Gdlib-simple.png} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_a8f7a333c8.gif => Resources/Public/Images/TestReference/Gdlib-text.gif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_a8f7a333c8.png => Resources/Public/Images/TestReference/Gdlib-text.png} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_read_ai.jpg => Resources/Public/Images/TestReference/Read-ai.jpg} (100%)
 rename typo3/sysext/install/{verify_imgs/install_read_bmp.jpg => Resources/Public/Images/TestReference/Read-bmp.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_read_gif.jpg => Resources/Public/Images/TestReference/Read-gif.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_read_jpg.jpg => Resources/Public/Images/TestReference/Read-jpg.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_read_pcx.jpg => Resources/Public/Images/TestReference/Read-pcx.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_read_pdf.jpg => Resources/Public/Images/TestReference/Read-pdf.jpg} (100%)
 rename typo3/sysext/install/{verify_imgs/install_read_png.jpg => Resources/Public/Images/TestReference/Read-png.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_read_tga.jpg => Resources/Public/Images/TestReference/Read-tga.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_read_tif.jpg => Resources/Public/Images/TestReference/Read-tif.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_scale_gif.gif => Resources/Public/Images/TestReference/Scale-gif.gif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_scale_jpg.jpg => Resources/Public/Images/TestReference/Scale-jpg.jpg} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_scale_png.png => Resources/Public/Images/TestReference/Scale-png.png} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_write_gif.gif => Resources/Public/Images/TestReference/Write-gif.gif} (100%)
 mode change 100755 => 100644
 rename typo3/sysext/install/{verify_imgs/install_write_png.png => Resources/Public/Images/TestReference/Write-png.png} (100%)
 mode change 100755 => 100644
 delete mode 100644 typo3/sysext/install/Resources/Public/Images/input-background.gif
 delete mode 100644 typo3/sysext/install/Resources/Public/Images/menuDatabase.png
 delete mode 100644 typo3/sysext/install/Resources/Public/Images/menuPhpinfo.png
 delete mode 100644 typo3/sysext/install/Resources/Public/Images/menuTypo3confEdit.png
 delete mode 100644 typo3/sysext/install/Resources/Public/Images/menuTypo3temp.png
 delete mode 100644 typo3/sysext/install/Resources/Public/Images/numbers.png
 create mode 100644 typo3/sysext/install/Resources/Public/Javascript/Install.js
 delete mode 100644 typo3/sysext/install/Resources/Public/Javascript/install.js
 rename typo3/{stylesheets/install/install.css => sysext/install/Resources/Public/Stylesheets/Action/Common/EarlyExit.css} (52%)
 create mode 100644 typo3/sysext/install/Resources/Public/Stylesheets/Action/Common/Install.css
 rename typo3/sysext/install/Resources/Public/Stylesheets/{install_login.css => Action/Common/Login.css} (87%)
 rename typo3/sysext/install/Resources/Public/Stylesheets/{general.css => Action/Step/General.css} (59%)
 create mode 100644 typo3/sysext/install/Resources/Public/Stylesheets/BackendModule/ShowEnableInstallToolButton.css
 delete mode 100644 typo3/sysext/install/Resources/Public/Stylesheets/ie7.css
 delete mode 100644 typo3/sysext/install/Resources/Public/Stylesheets/install.css
 delete mode 100644 typo3/sysext/install/Resources/Public/Stylesheets/install_123.css
 delete mode 100644 typo3/sysext/install/Resources/Public/Stylesheets/reset.css
 create mode 100644 typo3/sysext/install/Start/Install.php
 create mode 100644 typo3/sysext/install/Tests/Unit/FolderStructure/AbstractNodeTest.php
 create mode 100644 typo3/sysext/install/Tests/Unit/FolderStructure/DefaultFactoryTest.php
 create mode 100644 typo3/sysext/install/Tests/Unit/FolderStructure/DirectoryNodeTest.php
 create mode 100644 typo3/sysext/install/Tests/Unit/FolderStructure/FileNodeTest.php
 create mode 100644 typo3/sysext/install/Tests/Unit/FolderStructure/RootNodeTest.php
 create mode 100644 typo3/sysext/install/Tests/Unit/FolderStructure/StructureFacadeTest.php
 delete mode 100644 typo3/sysext/install/Tests/Unit/InstallToolTest.php
 rename typo3/sysext/install/Tests/Unit/{SchemaMigratorTest.php => Service/SqlSchemaMigrationServiceTest.php} (91%)
 delete mode 100644 typo3/sysext/install/ext_autoload.php
 mode change 100755 => 100644 typo3/sysext/install/ext_icon.gif
 delete mode 100644 typo3/sysext/install/imgs/copyrights.txt
 delete mode 100755 typo3/sysext/install/imgs/jesus.gif
 delete mode 100755 typo3/sysext/install/imgs/jesus.png
 delete mode 100644 typo3/sysext/install/mod/class.tx_install.php
 delete mode 100644 typo3/sysext/install/mod/class.tx_install_ajax.php
 delete mode 100644 typo3/sysext/install/mod/class.tx_install_session.php
 delete mode 100755 typo3/sysext/install/mod/clear.gif
 delete mode 100755 typo3/sysext/install/mod/conf.php
 delete mode 100644 typo3/sysext/install/mod/mod_styles.css
 delete mode 100644 typo3/sysext/install/mod/mod_template.html
 delete mode 100644 typo3/sysext/install/report/class.tx_install_report_installstatus.php
 delete mode 100644 typo3/sysext/install/report/locallang.xlf
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_addflexformstoacl.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_charsetdefaults.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_compatversion.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_compressionlevel.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_cscsplit.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_flagsfromsprite.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_imagelink.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_imagescols.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_installsysexts.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_localconfiguration.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_mediaflexform.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_mergeadvanced.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_migrateworkspaces.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_notinmenu.php
 delete mode 100644 typo3/sysext/install/updates/class.tx_coreupdates_t3skin.php
 delete mode 100755 typo3/sysext/install/verify_imgs/readme.txt

diff --git a/index.php b/index.php
index 74cdf99edc7e..43d98a76ea36 100644
--- a/index.php
+++ b/index.php
@@ -36,7 +36,7 @@
 require 'typo3/sysext/core/Classes/Core/Bootstrap.php';
 \TYPO3\CMS\Core\Core\Bootstrap::getInstance()
 	->baseSetup('')
-	->redirectToInstallToolIfLocalConfigurationFileDoesNotExist();
+	->redirectToInstallerIfLocalConfigurationFileDoesNotExist();
 
 require(PATH_tslib . 'index_ts.php');
 ?>
\ No newline at end of file
diff --git a/typo3/init.php b/typo3/init.php
index f67017a0d27a..70dcd941bcda 100644
--- a/typo3/init.php
+++ b/typo3/init.php
@@ -56,7 +56,7 @@ require 'sysext/core/Classes/Core/Bootstrap.php';
 
 \TYPO3\CMS\Core\Core\Bootstrap::getInstance()
 	->baseSetup('typo3/')
-	->redirectToInstallToolIfLocalConfigurationFileDoesNotExist('../')
+	->redirectToInstallerIfLocalConfigurationFileDoesNotExist('../')
 	->startOutputBuffering()
 	->loadConfigurationAndInitialize()
 	->loadTypo3LoadedExtAndExtLocalconf(TRUE)
diff --git a/typo3/install/README.txt b/typo3/install/README.txt
deleted file mode 100755
index 6a93259309a9..000000000000
--- a/typo3/install/README.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-typo3/install/
-
-Trigger script for the install tool.
-You can access the install tool from ".../typo3/install/"
-Notice: The "install" extension has to be loaded.
\ No newline at end of file
diff --git a/typo3/install/_.htaccess b/typo3/install/_.htaccess
deleted file mode 100755
index 77d149219171..000000000000
--- a/typo3/install/_.htaccess
+++ /dev/null
@@ -1,4 +0,0 @@
-AuthType Basic
-AuthName Typo3InstallScript
-AuthUserFile /www/.htpasswd
-require valid-user
diff --git a/typo3/install/index.php b/typo3/install/index.php
old mode 100755
new mode 100644
index 31e53209b357..3bebebcb4bbc
--- a/typo3/install/index.php
+++ b/typo3/install/index.php
@@ -1,61 +1,7 @@
 <?php
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 1999-2013 Kasper Skårhøj (kasperYYYY@typo3.com)
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-
-/**
- * Starter-script for install screen
- *
- * @author Kasper Skårhøj <kasperYYYY@typo3.com>
- */
-define('TYPO3_MODE', 'BE');
-define('TYPO3_enterInstallScript', '1');
-
-require '../sysext/core/Classes/Core/Bootstrap.php';
-\TYPO3\CMS\Core\Core\Bootstrap::getInstance()
-	->baseSetup('typo3/install/');
-
-require '../sysext/install/Classes/InstallBootstrap.php';
-\TYPO3\CMS\Install\InstallBootstrap::checkEnabledInstallToolOrDie();
-\TYPO3\CMS\Install\InstallBootstrap::createLocalConfigurationIfNotExists();
-
-\TYPO3\CMS\Core\Core\Bootstrap::getInstance()
-	->startOutputBuffering()
-	->loadConfigurationAndInitialize()
-	->loadTypo3LoadedExtAndExtLocalconf(FALSE)
-	->applyAdditionalConfigurationSettings()
-	->initializeTypo3DbGlobal()
-	->checkLockedBackendAndRedirectOrDie()
-	->checkBackendIpOrDie()
-	->checkSslBackendAndRedirectIfNeeded();
-
-	// Run install script
-if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('install')) {
-	die('Install Tool is not loaded as an extension.<br />You must add the key "install" to the list of installed extensions in typo3conf/LocalConfiguration.php, $TYPO3_CONF_VARS[\'EXT\'][\'extListArray\'].');
-}
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'mod/class.tx_install.php';
-$install_check = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\Installer', TRUE);
-$install_check->init();
+// Legacy file. The old install tool entry point was here, it is kept as well known
+// resource for backward compatibility and just redirects to the new entry point.
+header('HTTP/1.1 303 See Other');
+header('Location: ../sysext/install/Start/Install.php');
+die;
 ?>
\ No newline at end of file
diff --git a/typo3/sysext/core/Classes/Compatibility/CompatbilityClassLoaderPhpBelow50307.php b/typo3/sysext/core/Classes/Compatibility/CompatbilityClassLoaderPhpBelow50307.php
index bdf391938f8e..f13eff1b0b8f 100644
--- a/typo3/sysext/core/Classes/Compatibility/CompatbilityClassLoaderPhpBelow50307.php
+++ b/typo3/sysext/core/Classes/Compatibility/CompatbilityClassLoaderPhpBelow50307.php
@@ -1,6 +1,5 @@
 <?php
 namespace TYPO3\CMS\Core\Compatibility;
-use \TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /***************************************************************
  *  Copyright notice
@@ -28,6 +27,8 @@ use \TYPO3\CMS\Core\Utility\GeneralUtility;
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
+use \TYPO3\CMS\Core\Utility\GeneralUtility;
+
 /**
  * This is a compatibility layer for systems running PHP < 5.3.7
  * It rewrites the type hints in method definitions so that they are identical to the
@@ -83,6 +84,10 @@ class CompatbilityClassLoaderPhpBelow50307 extends \TYPO3\CMS\Core\Core\ClassLoa
 		) {
 			// If class in question starts with one of the allowed old prefixes
 			static::checkClassCacheEntryAndRequire($classPath);
+			// Load original file if the class is still not there (because cache is disabled)
+			if (!class_exists($className)) {
+				static::requireClassFile($classPath);
+			}
 		} else {
 			// Do nothing for system extensions or external libraries.
 			// They are already using the proper type hints or do not use them at all.
diff --git a/typo3/sysext/core/Classes/Configuration/ConfigurationManager.php b/typo3/sysext/core/Classes/Configuration/ConfigurationManager.php
index 769f9e5d7414..96067e652a6d 100644
--- a/typo3/sysext/core/Classes/Configuration/ConfigurationManager.php
+++ b/typo3/sysext/core/Classes/Configuration/ConfigurationManager.php
@@ -63,11 +63,6 @@ class ConfigurationManager {
 	 */
 	protected $additionalFactoryConfigurationFile = 'typo3conf/AdditionalFactoryConfiguration.php';
 
-	/**
-	 * @var string Path to legacy localconf.php file, relative to PATH_site
-	 */
-	protected $localconfFile = 'typo3conf/localconf.php';
-
 	/**
 	 * @var string Absolute path to typo3conf directory
 	 */
@@ -155,16 +150,6 @@ class ConfigurationManager {
 		return PATH_site . $this->additionalFactoryConfigurationFile;
 	}
 
-	/**
-	 * Get the file resource
-	 *
-	 * @return string
-	 * @deprecated since 6.1, will be removed if the compatibily layer for localconf.php is dropped
-	 */
-	public function getLocalconfFileLocation() {
-		return PATH_site . $this->localconfFile;
-	}
-
 	/**
 	 * Override local configuration with new values.
 	 *
@@ -265,12 +250,6 @@ class ConfigurationManager {
 		) {
 			$result = FALSE;
 		}
-		if (
-			file_exists($this->getLocalconfFileLocation())
-			&& !@is_writable($this->getLocalconfFileLocation())
-		) {
-			$result = FALSE;
-		}
 		return $result;
 	}
 
@@ -278,7 +257,6 @@ class ConfigurationManager {
 	 * Reads the configuration array and exports it to the global variable
 	 *
 	 * @access private
-	 * @throws \RuntimeException
 	 * @throws \UnexpectedValueException
 	 * @return void
 	 */
@@ -293,36 +271,9 @@ class ConfigurationManager {
 			if (@is_file($this->getAdditionalConfigurationFileLocation())) {
 				require $this->getAdditionalConfigurationFileLocation();
 			}
-			// @deprecated since 6.0: Simulate old 'extList' as comma separated list of 'extListArray'
-			$GLOBALS['TYPO3_CONF_VARS']['EXT']['extList'] = implode(',', $GLOBALS['TYPO3_CONF_VARS']['EXT']['extListArray']);
-		} elseif (@is_file($this->getLocalconfFileLocation())) {
-			$GLOBALS['TYPO3_CONF_VARS'] = $this->getDefaultConfiguration();
-			// Legacy localconf.php handling
-			// @deprecated: Can be removed if old localconf.php is not supported anymore
-			global $TYPO3_CONF_VARS, $typo_db, $typo_db_username, $typo_db_password, $typo_db_host, $typo_db_extTableDef_script;
-			require $this->getLocalconfFileLocation();
-			// If the localconf.php was not upgraded to LocalConfiguration.php, the default extListArray
-			// from EXT:core/Configuration/DefaultConfiguration.php is still set. In this case we just unset
-			// this key here, so \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getLoadedExtensionListArray() falls back to use extList string
-			// @deprecated: This case can be removed later if localconf.php is not supported anymore
-			unset($TYPO3_CONF_VARS['EXT']['extListArray']);
-			// Write the old globals into the new place in the configuration array
-			$GLOBALS['TYPO3_CONF_VARS']['DB'] = array();
-			$GLOBALS['TYPO3_CONF_VARS']['DB']['database'] = $typo_db;
-			$GLOBALS['TYPO3_CONF_VARS']['DB']['username'] = $typo_db_username;
-			$GLOBALS['TYPO3_CONF_VARS']['DB']['password'] = $typo_db_password;
-			$GLOBALS['TYPO3_CONF_VARS']['DB']['host'] = $typo_db_host;
-			$GLOBALS['TYPO3_CONF_VARS']['DB']['extTablesDefinitionScript'] = $typo_db_extTableDef_script;
-			unset($GLOBALS['typo_db']);
-			unset($GLOBALS['typo_db_username']);
-			unset($GLOBALS['typo_db_password']);
-			unset($GLOBALS['typo_db_host']);
-			unset($GLOBALS['typo_db_extTableDef_script']);
 		} else {
-			throw new \RuntimeException(
-				'Neither ' . $this->localConfigurationFile . ' (recommended) nor ' . $this->localconfFile . ' (obsolete) could be found!',
-				1349272337
-			);
+			// No LocalConfiguration (yet), load DefaultConfiguration only
+			$GLOBALS['TYPO3_CONF_VARS'] = $this->getDefaultConfiguration();
 		}
 	}
 
@@ -379,13 +330,15 @@ class ConfigurationManager {
 	 * file in typo3conf to create a basic LocalConfiguration.php. This is used
 	 * by the install tool in an early step.
 	 *
+	 * @throws \RuntimeException
 	 * @return void
 	 * @access private
 	 */
 	public function createLocalConfigurationFromFactoryConfiguration() {
 		if (file_exists($this->getLocalConfigurationFileLocation())) {
 			throw new \RuntimeException(
-				'LocalConfiguration.php exists already', 1364836026
+				'LocalConfiguration.php exists already',
+				1364836026
 			);
 		}
 		$localConfigurationArray = require $this->getFactoryConfigurationFileLocation();
diff --git a/typo3/sysext/core/Classes/Core/Bootstrap.php b/typo3/sysext/core/Classes/Core/Bootstrap.php
index 7d59ce5a2790..b93df02c4e6b 100644
--- a/typo3/sysext/core/Classes/Core/Bootstrap.php
+++ b/typo3/sysext/core/Classes/Core/Bootstrap.php
@@ -123,21 +123,18 @@ class Bootstrap {
 	}
 
 	/**
-	 * Redirect to install tool if LocalConfiguration.php is missing
+	 * Redirect to install tool if LocalConfiguration.php is missing.
 	 *
 	 * @param string $pathUpToDocumentRoot Can contain eg. '../' if called from a sub directory
 	 * @return \TYPO3\CMS\Core\Core\Bootstrap
 	 * @internal This is not a public API method, do not use in own extensions
 	 */
-	public function redirectToInstallToolIfLocalConfigurationFileDoesNotExist($pathUpToDocumentRoot = '') {
+	public function redirectToInstallerIfLocalConfigurationFileDoesNotExist($pathUpToDocumentRoot = '') {
 		/** @var $configurationManager \TYPO3\CMS\Core\Configuration\ConfigurationManager */
 		$configurationManager = Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
-		if (
-			!file_exists($configurationManager->getLocalConfigurationFileLocation())
-			&& !file_exists($configurationManager->getLocalconfFileLocation())
-		) {
+		if (!file_exists($configurationManager->getLocalConfigurationFileLocation())) {
 			require_once __DIR__ . '/../Utility/HttpUtility.php';
-			Utility\HttpUtility::redirect($pathUpToDocumentRoot . 'typo3/install/index.php?mode=123&step=1&password=joh316');
+			Utility\HttpUtility::redirect($pathUpToDocumentRoot . 'typo3/sysext/install/Start/Install.php');
 		}
 		return $this;
 	}
@@ -146,12 +143,21 @@ class Bootstrap {
 	 * Includes LocalConfiguration.php and sets several
 	 * global settings depending on configuration.
 	 *
+	 * @param boolean $allowCaching Whether to allow caching - affects cache_core (autoloader)
 	 * @return \TYPO3\CMS\Core\Core\Bootstrap
 	 * @internal This is not a public API method, do not use in own extensions
 	 */
-	public function loadConfigurationAndInitialize() {
-		$this->getInstance()
-			->populateLocalConfiguration()
+	public function loadConfigurationAndInitialize($allowCaching = TRUE) {
+		$bootstrap = $this->getInstance();
+
+		$bootstrap->populateLocalConfiguration();
+
+		if (!$allowCaching) {
+			$bootstrap->setCoreCacheToNullBackend();
+		}
+
+		$bootstrap->defineDatabaseConstants()
+			->defineUserAgentConstant()
 			->registerExtDirectComponents()
 			->initializeCachingFramework()
 			->registerAutoloader()
@@ -190,7 +196,6 @@ class Bootstrap {
 	/**
 	 * Load TYPO3_LOADED_EXT, recreate class loader registry and load ext_localconf
 	 *
-	 * @param boolean $allowCaching
 	 * @return \TYPO3\CMS\Core\Core\Bootstrap
 	 * @internal This is not a public API method, do not use in own extensions
 	 */
@@ -239,14 +244,33 @@ class Bootstrap {
 	 * execute typo3conf/AdditionalConfiguration.php, define database related constants.
 	 *
 	 * @return \TYPO3\CMS\Core\Core\Bootstrap
+	 * @internal This is not a public API method, do not use in own extensions
 	 */
-	protected function populateLocalConfiguration() {
-		try {
-			Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')
-				->exportConfiguration();
-		} catch (\Exception $e) {
-			die($e->getMessage());
-		}
+	public function populateLocalConfiguration() {
+		/** @var $configurationManager \TYPO3\CMS\Core\Configuration\ConfigurationManager */
+		$configurationManager = Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+		$configurationManager->exportConfiguration();
+		return $this;
+	}
+
+	/**
+	 * Set cache_core to null backend, effectively disabling eg. the autoloader cache
+	 *
+	 * @return \TYPO3\CMS\Core\Core\Bootstrap
+	 * @internal This is not a public API method, do not use in own extensions
+	 */
+	public function setCoreCacheToNullBackend() {
+		$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_core']['backend']
+			= 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
+		return $this;
+	}
+
+	/**
+	 * Define database constants
+	 *
+	 * @return \TYPO3\CMS\Core\Core\Bootstrap
+	 */
+	protected function defineDatabaseConstants() {
 		define('TYPO3_db', $GLOBALS['TYPO3_CONF_VARS']['DB']['database']);
 		define('TYPO3_db_username', $GLOBALS['TYPO3_CONF_VARS']['DB']['username']);
 		define('TYPO3_db_password', $GLOBALS['TYPO3_CONF_VARS']['DB']['password']);
@@ -255,6 +279,15 @@ class Bootstrap {
 			isset($GLOBALS['TYPO3_CONF_VARS']['DB']['extTablesDefinitionScript'])
 			? $GLOBALS['TYPO3_CONF_VARS']['DB']['extTablesDefinitionScript']
 			: 'extTables.php');
+		return $this;
+	}
+
+	/**
+	 * Define user agent constant
+	 *
+	 * @return \TYPO3\CMS\Core\Core\Bootstrap
+	 */
+	protected function defineUserAgentConstant() {
 		define('TYPO3_user_agent', 'User-Agent: ' . $GLOBALS['TYPO3_CONF_VARS']['HTTP']['userAgent']);
 		return $this;
 	}
diff --git a/typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php b/typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php
index 8fe943d82998..b93d26f6787e 100644
--- a/typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php
+++ b/typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php
@@ -181,15 +181,9 @@ class SystemEnvironmentBuilder {
 		if (!is_file(PATH_thisScript)) {
 			die('Unable to determine path to entry script.');
 		}
-		if (!is_dir(PATH_t3lib)) {
-			die('Calculated absolute path to t3lib directory does not exist.');
-		}
 		if (!is_dir(PATH_tslib)) {
 			die('Calculated absolute path to tslib directory does not exist.');
 		}
-		if (!is_dir(PATH_typo3conf)) {
-			die('Calculated absolute path to typo3conf directory does not exist');
-		}
 	}
 
 	/**
diff --git a/typo3/sysext/core/Classes/Database/DatabaseConnection.php b/typo3/sysext/core/Classes/Database/DatabaseConnection.php
index ef8a3c3446c3..31a66502e20a 100644
--- a/typo3/sysext/core/Classes/Database/DatabaseConnection.php
+++ b/typo3/sysext/core/Classes/Database/DatabaseConnection.php
@@ -1183,7 +1183,7 @@ class DatabaseConnection {
 			$this->databaseUsername,
 			$this->databaseUserPassword,
 			NULL,
-			$this->databasePort,
+			(int)$this->databasePort,
 			NULL,
 			$this->connectionCompression ? MYSQLI_CLIENT_COMPRESS : 0
 		);
diff --git a/typo3/sysext/core/Classes/Database/SqlParser.php b/typo3/sysext/core/Classes/Database/SqlParser.php
index f66b69452f22..e5960f9814e6 100644
--- a/typo3/sysext/core/Classes/Database/SqlParser.php
+++ b/typo3/sysext/core/Classes/Database/SqlParser.php
@@ -26,11 +26,7 @@ namespace TYPO3\CMS\Core\Database;
  *
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
-/**
- * TYPO3 SQL parser
- *
- * @author Kasper Skårhøj <kasperYYYY@typo3.com>
- */
+
 /**
  * TYPO3 SQL parser class.
  *
diff --git a/typo3/sysext/core/Classes/FormProtection/InstallToolFormProtection.php b/typo3/sysext/core/Classes/FormProtection/InstallToolFormProtection.php
index 0debe8cd0e46..9d254e401b98 100644
--- a/typo3/sysext/core/Classes/FormProtection/InstallToolFormProtection.php
+++ b/typo3/sysext/core/Classes/FormProtection/InstallToolFormProtection.php
@@ -90,10 +90,12 @@ class InstallToolFormProtection extends AbstractFormProtection {
 	 *
 	 * This instance will be used for displaying messages.
 	 *
-	 * @param \TYPO3\CMS\Install\Installer $installTool the current instance of the install tool
+	 * @param object $installTool The current instance of the install tool
 	 * @return void
+	 * @deprecated since 6.2, will be removed two versions later. Message handling is done by install tool
 	 */
-	public function injectInstallTool(\TYPO3\CMS\Install\Installer $installTool) {
+	public function injectInstallTool($installTool) {
+		\TYPO3\CMS\Core\Utility\GeneralUtility::logDeprecatedFunction();
 		$this->installTool = $installTool;
 	}
 
@@ -102,9 +104,16 @@ class InstallToolFormProtection extends AbstractFormProtection {
 	 * form token is invalid.
 	 *
 	 * @return void
+	 * @deprecated since 6.2, will be removed two versions later. Message handling is done by install tool
 	 */
 	protected function createValidationErrorMessage() {
-		$this->installTool->addErrorMessage('Validating the security token of this form has failed. ' . 'Please reload the form and submit it again.');
+		// @deprecated since 6.2, neither the install tool class nor the addErrorMessage() exist anymore
+		if (is_object($this->installTool)) {
+			$this->installTool->addErrorMessage(
+				'Validating the security token of this form has failed. '
+				. 'Please reload the form and submit it again.'
+			);
+		}
 	}
 
 	/**
diff --git a/typo3/sysext/core/Classes/Utility/PhpOptionsUtility.php b/typo3/sysext/core/Classes/Utility/PhpOptionsUtility.php
index b48519df1985..45c17ff14116 100644
--- a/typo3/sysext/core/Classes/Utility/PhpOptionsUtility.php
+++ b/typo3/sysext/core/Classes/Utility/PhpOptionsUtility.php
@@ -65,8 +65,10 @@ class PhpOptionsUtility {
 	 * Check if php sql.safe_mode is enabled
 	 *
 	 * @return boolean TRUE if sql.safe_mode is enabled, FALSE if disabled
+	 * @deprecated since 6.2, will be removed two versions later
 	 */
 	static public function isSqlSafeModeEnabled() {
+		GeneralUtility::logDeprecatedFunction();
 		return self::getIniValueBoolean('sql.safe_mode');
 	}
 
diff --git a/typo3/sysext/core/Configuration/DefaultConfiguration.php b/typo3/sysext/core/Configuration/DefaultConfiguration.php
index 83cc43b68639..172a228b1728 100644
--- a/typo3/sysext/core/Configuration/DefaultConfiguration.php
+++ b/typo3/sysext/core/Configuration/DefaultConfiguration.php
@@ -210,7 +210,8 @@ return array(
 				'Image.Preview' => 'TYPO3\\CMS\\Core\\Resource\\Processing\\ImagePreviewTask',
 				'Image.CropScaleMask' => 'TYPO3\\CMS\\Core\\Resource\\Processing\\ImageCropScaleMaskTask'
 			)
-		)
+		),
+		'isInitialInstallationInProgress' => FALSE,		// Boolean: If TRUE, the installation is 'in progress'. This value is handled within the install tool step installer internally.
 	),
 	'EXT' => array( // Options related to the Extension Management
 		'allowGlobalInstall' => FALSE,		// Boolean: If set, global extensions in typo3/ext/ are allowed to be installed, updated and deleted etc.
diff --git a/typo3/sysext/core/Configuration/FactoryConfiguration.php b/typo3/sysext/core/Configuration/FactoryConfiguration.php
index 3b608e6dbb30..7dd34f69f2e1 100644
--- a/typo3/sysext/core/Configuration/FactoryConfiguration.php
+++ b/typo3/sysext/core/Configuration/FactoryConfiguration.php
@@ -7,6 +7,10 @@
  */
 return array(
 	'BE' => array(
+		'explicitADmode' => 'explicitAllow',
+		'fileCreateMask' => '0664',
+		'folderCreateMask' => '2774',
+		'forceCharset' => 'utf-8',
 		'installToolPassword' => 'bacb98acf97e0b6112b1d1b650b84971',
 	),
 	'DB' => array(
@@ -50,7 +54,13 @@ return array(
 			'form',
 		),
 	),
+	'GFX' => array(
+		'jpg_quality' => '80',
+	),
 	'SYS' => array(
+		'compat_version' => '6.2',
+		'isInitialInstallationInProgress' => TRUE,
+		'setDBinit' => 'SET NAMES utf8;',
 		'sitename' => 'New TYPO3 site',
 	),
 );
diff --git a/typo3/sysext/core/Migrations/Code/LegacyClassesForIde.php b/typo3/sysext/core/Migrations/Code/LegacyClassesForIde.php
index 8cf220f3713e..8b61d75fb974 100644
--- a/typo3/sysext/core/Migrations/Code/LegacyClassesForIde.php
+++ b/typo3/sysext/core/Migrations/Code/LegacyClassesForIde.php
@@ -1461,26 +1461,11 @@ class ux_t3lib_DB extends \TYPO3\CMS\Dbal\Database\DatabaseConnection {}
  */
 class ux_t3lib_sqlparser extends \TYPO3\CMS\Dbal\Database\SqlParser {}
 
-/**
- * @deprecated since 6.0 will be removed in 7.0
- */
-class tx_dbal_autoloader extends \TYPO3\CMS\Dbal\Autoloader {}
-
 /**
  * @deprecated since 6.0 will be removed in 7.0
  */
 class tx_dbal_module1 extends \TYPO3\CMS\Dbal\Controller\ModuleController {}
 
-/**
- * @deprecated since 6.0 will be removed in 7.0
- */
-class tx_dbal_tsparserext extends \TYPO3\CMS\Dbal\ExtensionManager\MessageDisplay {}
-
-/**
- * @deprecated since 6.0 will be removed in 7.0
- */
-class tx_dbal_installtool extends \TYPO3\CMS\Dbal\Hooks\InstallToolHooks {}
-
 /**
  * @deprecated since 6.0 will be removed in 7.0
  */
@@ -5406,16 +5391,6 @@ class SC_mod_web_info_index extends \TYPO3\CMS\Info\Controller\InfoModuleControl
  */
 class tx_infopagetsconfig_webinfo extends \TYPO3\CMS\InfoPagetsconfig\Controller\InfoPageTyposcriptConfigController {}
 
-/**
- * @deprecated since 6.0 will be removed in 7.0
- */
-interface Tx_Install_Interfaces_CheckTheDatabaseHook extends \TYPO3\CMS\Install\CheckTheDatabaseHookInterface {}
-
-/**
- * @deprecated since 6.0 will be removed in 7.0
- */
-class tx_install_mod1 extends \TYPO3\CMS\Install\Controller\InstallToolModuleController {}
-
 /**
  * @deprecated since 6.0 will be removed in 7.0
  */
@@ -5489,17 +5464,7 @@ class tx_coreupdates_t3skin extends \TYPO3\CMS\Install\CoreUpdates\T3skinUpdate
 /**
  * @deprecated since 6.0 will be removed in 7.0
  */
-class tx_install_ajax extends \TYPO3\CMS\Install\EidHandler {}
-
-/**
- * @deprecated since 6.0 will be removed in 7.0
- */
-class Tx_Install_Service_BasicService extends \TYPO3\CMS\Install\EnableFileService {}
-
-/**
- * @deprecated since 6.0 will be removed in 7.0
- */
-class tx_install extends \TYPO3\CMS\Install\Installer {}
+class Tx_Install_Service_BasicService extends \TYPO3\CMS\Install\Service\EnableFileService {}
 
 /**
  * @deprecated since 6.0 will be removed in 7.0
@@ -5509,12 +5474,12 @@ class tx_install_report_InstallStatus extends \TYPO3\CMS\Install\Report\InstallS
 /**
  * @deprecated since 6.0 will be removed in 7.0
  */
-class tx_install_session extends \TYPO3\CMS\Install\Session {}
+class tx_install_session extends \TYPO3\CMS\Install\Service\SessionService {}
 
 /**
  * @deprecated since 6.0 will be removed in 7.0
  */
-class t3lib_install_Sql extends \TYPO3\CMS\Install\Sql\SchemaMigrator {}
+class t3lib_install_Sql extends \TYPO3\CMS\Install\Service\SqlSchemaMigrationService {}
 
 /**
  * @deprecated since 6.0 will be removed in 7.0
diff --git a/typo3/sysext/core/Resources/Private/Font/README.txt b/typo3/sysext/core/Resources/Private/Font/README.txt
index b4f1e8743190..3040ff22e8f6 100644
--- a/typo3/sysext/core/Resources/Private/Font/README.txt
+++ b/typo3/sysext/core/Resources/Private/Font/README.txt
@@ -1,5 +1,3 @@
-Fonts:
-
 *******************************************************************************
 Nimbus Sans L regular
 "nimbus.ttf" - An "arial"-look-alike font. If you want to use the real Arial
@@ -7,7 +5,7 @@ font you should upload the arial-normal ttf file from your Windows system
 (fonts/arial.ttf).
 *******************************************************************************
 
-License (t3lib/fonts/nimbus.ttf):
+License (nimbus.ttf):
 
 nimbus.ttf was downloaded as n019003l.ttf from
 <ftp://ftp.gnome.ru/fonts/urw/release/urw-fonts-1.0.7pre18-ttf.tar.bz2>.
@@ -30,144 +28,4 @@ nimbus.sfd.gz was downladed as NimbusSansL-Regu.sfd from
 	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 St, Fifth Floor, Boston, MA 02110-1301 USA
-	02110-1301, USA.
-
-
-
-*******************************************************************************
-Bitstream Vera Sans
-"vera.ttf" - A "verdana"-look-alike font. If you want to use the real Verdana
-font you should upload the verdana-normal ttf file from your Windows system
-(fonts/verdana.ttf).
-*******************************************************************************
-
-This file was downloaded from <http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/>.
-
-Copyright Holder: Bitstream, Inc.
-
-License (t3lib/fonts/vera.ttf):
-
-Bitstream Vera Fonts Copyright
-
-The fonts have a generous copyright, allowing derivative works (as
-long as "Bitstream" or "Vera" are not in the names), and full
-redistribution (so long as they are not *sold* by themselves). They
-can be be bundled, redistributed and sold with any software.
-
-The fonts are distributed under the following copyright:
-
-Copyright
-=========
-
-Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream
-Vera is a trademark of Bitstream, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the fonts accompanying this license ("Fonts") and associated
-documentation files (the "Font Software"), to reproduce and distribute
-the Font Software, including without limitation the rights to use,
-copy, merge, publish, distribute, and/or sell copies of the Font
-Software, and to permit persons to whom the Font Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright and trademark notices and this permission notice
-shall be included in all copies of one or more of the Font Software
-typefaces.
-
-The Font Software may be modified, altered, or added to, and in
-particular the designs of glyphs or characters in the Fonts may be
-modified and additional glyphs or characters may be added to the
-Fonts, only if the fonts are renamed to names not containing either
-the words "Bitstream" or the word "Vera".
-
-This License becomes null and void to the extent applicable to Fonts
-or Font Software that has been modified and is distributed under the
-"Bitstream Vera" names.
-
-The Font Software may be sold as part of a larger software package but
-no copy of one or more of the Font Software typefaces may be sold by
-itself.
-
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
-BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL,
-OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT
-SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
-
-Except as contained in this notice, the names of Gnome, the Gnome
-Foundation, and Bitstream Inc., shall not be used in advertising or
-otherwise to promote the sale, use or other dealings in this Font
-Software without prior written authorization from the Gnome Foundation
-or Bitstream Inc., respectively. For further information, contact:
-fonts at gnome dot org.
-
-Copyright FAQ
-=============
-
-   1. I don't understand the resale restriction... What gives?
-
-      Bitstream is giving away these fonts, but wishes to ensure its
-      competitors can't just drop the fonts as is into a font sale system
-      and sell them as is. It seems fair that if Bitstream can't make money
-      from the Bitstream Vera fonts, their competitors should not be able to
-      do so either. You can sell the fonts as part of any software package,
-      however.
-
-   2. I want to package these fonts separately for distribution and
-      sale as part of a larger software package or system.  Can I do so?
-
-      Yes. A RPM or Debian package is a "larger software package" to begin
-      with, and you aren't selling them independently by themselves.
-      See 1. above.
-
-   3. Are derivative works allowed?
-      Yes!
-
-   4. Can I change or add to the font(s)?
-      Yes, but you must change the name(s) of the font(s).
-
-   5. Under what terms are derivative works allowed?
-
-      You must change the name(s) of the fonts. This is to ensure the
-      quality of the fonts, both to protect Bitstream and Gnome. We want to
-      ensure that if an application has opened a font specifically of these
-      names, it gets what it expects (though of course, using fontconfig,
-      substitutions could still could have occurred during font
-      opening). You must include the Bitstream copyright. Additional
-      copyrights can be added, as per copyright law. Happy Font Hacking!
-
-   6. If I have improvements for Bitstream Vera, is it possible they might get
-       adopted in future versions?
-
-      Yes. The contract between the Gnome Foundation and Bitstream has
-      provisions for working with Bitstream to ensure quality additions to
-      the Bitstream Vera font family. Please contact us if you have such
-      additions. Note, that in general, we will want such additions for the
-      entire family, not just a single font, and that you'll have to keep
-      both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add
-      glyphs to the font, they must be stylistically in keeping with Vera's
-      design. Vera cannot become a "ransom note" font. Jim Lyles will be
-      providing a document describing the design elements used in Vera, as a
-      guide and aid for people interested in contributing to Vera.
-
-   7. I want to sell a software package that uses these fonts: Can I do so?
-
-      Sure. Bundle the fonts with your software and sell your software
-      with the fonts. That is the intent of the copyright.
-
-   8. If applications have built the names "Bitstream Vera" into them,
-      can I override this somehow to use fonts of my choosing?
-
-      This depends on exact details of the software. Most open source
-      systems and software (e.g., Gnome, KDE, etc.) are now converting to
-      use fontconfig (see www.fontconfig.org) to handle font configuration,
-      selection and substitution; it has provisions for overriding font
-      names and subsituting alternatives. An example is provided by the
-      supplied local.conf file, which chooses the family Bitstream Vera for
-      "sans", "serif" and "monospace".  Other software (e.g., the XFree86
-      core server) has other mechanisms for font substitution.
-
+	02110-1301, USA.
\ No newline at end of file
diff --git a/typo3/sysext/core/Tests/Unit/Configuration/ConfigurationManagerTest.php b/typo3/sysext/core/Tests/Unit/Configuration/ConfigurationManagerTest.php
index e2ce1558519e..4257ff0883d7 100644
--- a/typo3/sysext/core/Tests/Unit/Configuration/ConfigurationManagerTest.php
+++ b/typo3/sysext/core/Tests/Unit/Configuration/ConfigurationManagerTest.php
@@ -347,34 +347,6 @@ class ConfigurationManagerTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
 		$this->assertFalse($result);
 	}
 
-	/**
-	 * @test
-	 */
-	public function canWriteConfigurationReturnsFalseIfLocalconfFileIsNotWritable() {
-		if (function_exists('posix_getegid') && posix_getegid() === 0) {
-			$this->markTestSkipped('Test skipped if run on linux as root');
-		} elseif (TYPO3_OS == 'WIN') {
-			$this->markTestSkipped('Not available on Windows');
-		}
-		/** @var $fixture \TYPO3\CMS\Core\Configuration\ConfigurationManager|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface */
-		$fixture = $this->getAccessibleMock('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager', array('dummy'));
-
-		$file = 'typo3temp/' . uniqid('test_');
-		$absoluteFile = PATH_site . $file;
-		touch($absoluteFile);
-		$this->testFilesToDelete[] = $absoluteFile;
-		chmod($absoluteFile, 0444);
-		clearstatcache();
-
-		$fixture->_set('localconfFile', $file);
-
-		$result = $fixture->canWriteConfiguration();
-
-		chmod($absoluteFile, 0644);
-
-		$this->assertFalse($result);
-	}
-
 	/**
 	 * @test
 	 */
diff --git a/typo3/sysext/core/Tests/Unit/FormProtection/InstallToolFormProtectionTest.php b/typo3/sysext/core/Tests/Unit/FormProtection/InstallToolFormProtectionTest.php
index fe9cfea50595..78e9cdb74cab 100644
--- a/typo3/sysext/core/Tests/Unit/FormProtection/InstallToolFormProtectionTest.php
+++ b/typo3/sysext/core/Tests/Unit/FormProtection/InstallToolFormProtectionTest.php
@@ -108,10 +108,11 @@ class InstallToolFormProtectionTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
 
 	/**
 	 * @test
+	 * @deprecated since 6.2. Test can be removed if injectInstallTool method is dropped
 	 */
 	public function createValidationErrorMessageAddsErrorMessage() {
 		$installTool = $this->getMock(
-			'TYPO3\\CMS\\Install\\Installer', array('addErrorMessage'), array(), '', FALSE
+			'stdClass', array('addErrorMessage'), array(), '', FALSE
 		);
 		$installTool->expects($this->once())->method('addErrorMessage')
 			->with(
diff --git a/typo3/sysext/dbal/Classes/Autoloader.php b/typo3/sysext/dbal/Classes/Autoloader.php
deleted file mode 100644
index 170a894cc90b..000000000000
--- a/typo3/sysext/dbal/Classes/Autoloader.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-namespace TYPO3\CMS\Dbal;
-
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2010-2013 Xavier Perseguers <xavier@typo3.org>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-/**
- * Autoloader included from Install Tool that lets DBAL load itself
- * if it makes sense.
- *
- * @author Xavier Perseguers <xavier@typo3.org>
- */
-class Autoloader {
-
-	/**
-	 * Activates DBAL if it is supported.
-	 *
-	 * @param \TYPO3\CMS\Install\Installer $instObj
-	 * @return void
-	 */
-	public function execute(\TYPO3\CMS\Install\Installer $instObj) {
-		if ($instObj->mode == '123') {
-			switch ($instObj->step) {
-			case 1:
-				if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('dbal') && $this->isDbalSupported()) {
-					$this->activateDbal();
-					// Reload page to have Install Tool actually load DBAL
-					$redirectUrl = \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_REQUEST_URL');
-					\TYPO3\CMS\Core\Utility\HttpUtility::redirect($redirectUrl);
-				}
-				break;
-			case 2:
-				if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('dbal') && $this->isDbalSupported()) {
-					$this->activateDbal();
-				}
-				break;
-			case 3:
-				$driver = $instObj->INSTALL['Database']['typo_db_driver'];
-				if ($driver === 'mysql') {
-					$this->deactivateDbal();
-				}
-				break;
-			}
-		}
-	}
-
-	/**
-	 * Returns TRUE if PHP modules to run DBAL are loaded.
-	 *
-	 * @return boolean
-	 */
-	protected function isDbalSupported() {
-		return extension_loaded('odbc') || extension_loaded('pdo') || extension_loaded('oci8');
-	}
-
-	/**
-	 * Activates DBAL.
-	 *
-	 * @return void
-	 */
-	protected function activateDbal() {
-		if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('adodb')) {
-			\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::loadExtension('adodb');
-		}
-		if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('dbal')) {
-			\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::loadExtension('dbal');
-		}
-	}
-
-	/**
-	 * Dectivates DBAL.
-	 *
-	 * @return void
-	 */
-	protected function deactivateDbal() {
-		if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('dbal')) {
-			\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::unloadExtension('dbal');
-		}
-		if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('adodb')) {
-			\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::unloadExtension('adodb');
-		}
-	}
-
-}
-
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/dbal/Classes/Database/DatabaseConnection.php b/typo3/sysext/dbal/Classes/Database/DatabaseConnection.php
index 5c24978191d1..9dd102c0a370 100644
--- a/typo3/sysext/dbal/Classes/Database/DatabaseConnection.php
+++ b/typo3/sysext/dbal/Classes/Database/DatabaseConnection.php
@@ -174,7 +174,7 @@ class DatabaseConnection extends \TYPO3\CMS\Core\Database\DatabaseConnection {
 	public $SQLparser;
 
 	/**
-	 * @var \TYPO3\CMS\Install\Sql\SchemaMigrator
+	 * @var \TYPO3\CMS\Install\Service\SqlSchemaMigrationService
 	 */
 	protected $installerSql = NULL;
 
@@ -192,7 +192,7 @@ class DatabaseConnection extends \TYPO3\CMS\Core\Database\DatabaseConnection {
 	public function __construct() {
 		// Set SQL parser object for internal use:
 		$this->SQLparser = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Database\\SqlParser');
-		$this->installerSql = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\Sql\\SchemaMigrator');
+		$this->installerSql = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\Service\\SqlSchemaMigrationService');
 		$this->queryCache = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Cache\\CacheManager')->getCache('dbal');
 		// Set internal variables with configuration:
 		$this->conf = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dbal'];
@@ -271,12 +271,14 @@ class DatabaseConnection extends \TYPO3\CMS\Core\Database\DatabaseConnection {
 	 * @return void
 	 */
 	protected function analyzeExtensionTables() {
-		foreach ($GLOBALS['TYPO3_LOADED_EXT'] as $extensionConfiguration) {
-			if (!is_array($extensionConfiguration) || !isset($extensionConfiguration['ext_tables.sql'])) {
-				continue;
+		if (isset($GLOBALS['TYPO3_LOADED_EXT']) && is_array($GLOBALS['TYPO3_LOADED_EXT'])) {
+			foreach ($GLOBALS['TYPO3_LOADED_EXT'] as $extensionConfiguration) {
+				if (!is_array($extensionConfiguration) || !isset($extensionConfiguration['ext_tables.sql'])) {
+					continue;
+				}
+				$extensionsSql = file_get_contents($extensionConfiguration['ext_tables.sql']);
+				$this->parseAndAnalyzeSql($extensionsSql);
 			}
-			$extensionsSql = file_get_contents($extensionConfiguration['ext_tables.sql']);
-			$this->parseAndAnalyzeSql($extensionsSql);
 		}
 	}
 
@@ -318,7 +320,7 @@ class DatabaseConnection extends \TYPO3\CMS\Core\Database\DatabaseConnection {
 	/**
 	 * Analyzes fields and adds the extracted information to the field type, auto increment and primary key info caches.
 	 *
-	 * @param array $parsedExtSQL The output produced by \TYPO3\CMS\Install\Sql\SchemaMigrator->getFieldDefinitions_fileContent()
+	 * @param array $parsedExtSQL The output produced by \TYPO3\CMS\Install\Service\SqlSchemaMigrationService->getFieldDefinitions_fileContent()
 	 * @return void
 	 */
 	protected function analyzeFields($parsedExtSQL) {
diff --git a/typo3/sysext/dbal/Classes/Hooks/InstallToolHooks.php b/typo3/sysext/dbal/Classes/Hooks/InstallToolHooks.php
deleted file mode 100644
index 4d1cedfbe51e..000000000000
--- a/typo3/sysext/dbal/Classes/Hooks/InstallToolHooks.php
+++ /dev/null
@@ -1,502 +0,0 @@
-<?php
-namespace TYPO3\CMS\Dbal\Hooks;
-
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2010-2013 Xavier Perseguers <xavier@typo3.org>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-/**
- * Hooks for TYPO3 Install Tool.
- *
- * @author Xavier Perseguers <xavier@typo3.org>
- */
-class InstallToolHooks {
-
-	/**
-	 * @var string
-	 */
-	protected $templateFilePath = 'res/Templates/';
-
-	/**
-	 * @var array
-	 */
-	protected $supportedDrivers;
-
-	/**
-	 * @var array
-	 */
-	protected $availableDrivers;
-
-	/**
-	 * @var string
-	 */
-	protected $driver;
-
-	/**
-	 * Default constructor.
-	 */
-	public function __construct() {
-		$this->supportedDrivers = $this->getSupportedDrivers();
-		$this->availableDrivers = $this->getAvailableDrivers();
-		$configDriver =& $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dbal']['handlerCfg']['_DEFAULT']['config']['driver'];
-		$this->driver = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET('driver');
-		if (!$this->driver && $configDriver) {
-			$this->driver = $configDriver;
-		}
-	}
-
-	/**
-	 * Hooks into Installer to set required PHP modules.
-	 *
-	 * @param array $modules
-	 * @param \TYPO3\CMS\Install\Installer|\TYPO3\CMS\Reports\Report\Status\SystemStatus $instObj
-	 * @return array modules
-	 */
-	public function setRequiredPhpModules(array $modules, $instObj) {
-		$modifiedModules = array();
-		foreach ($modules as $key => $module) {
-			if ($module === 'mysql') {
-				$dbModules = array();
-				foreach ($this->supportedDrivers as $abstractionLayer => $drivers) {
-					foreach ($drivers as $driver) {
-						$dbModules = array_merge($dbModules, $driver['extensions']);
-					}
-				}
-				$module = $dbModules;
-			}
-			$modifiedModules[] = $module;
-		}
-		return $modifiedModules;
-	}
-
-	/**
-	 * Hooks into Installer to let a non-MySQL database to be configured.
-	 *
-	 * @param array $markers
-	 * @param integer $step
-	 * @param \TYPO3\CMS\Install\Installer $instObj
-	 * @return void
-	 */
-	public function executeStepOutput(array &$markers, $step, \TYPO3\CMS\Install\Installer $instObj) {
-		switch ($step) {
-		case 2:
-			$this->createConnectionForm($markers, $instObj);
-			break;
-		case 3:
-			$this->createDatabaseForm($markers, $instObj);
-			break;
-		}
-	}
-
-	/**
-	 * Hooks into Installer to modify lines to be written to localconf.php.
-	 *
-	 * @param array $lines This parameter is obsolet as of TYPO3 6.0
-	 * @param integer $step
-	 * @param \TYPO3\CMS\Install\Installer $instObj
-	 * @return void
-	 */
-	public function executeWriteLocalconf(array &$lines, $step, \TYPO3\CMS\Install\Installer $instObj) {
-		switch ($step) {
-		case 3:
-
-		case 4:
-			$driver = $instObj->INSTALL['Database']['typo_db_driver'];
-			if (!$driver && $this->driver) {
-				// Driver was already configured
-				break;
-			}
-			$driverConfig = '';
-			switch ($driver) {
-			case 'oci8':
-				$driverConfig = array(
-					'driverOptions' => array(
-						'connectSID' => $instObj->INSTALL['Database']['typo_db_type'] === 'sid' ? TRUE : FALSE
-					)
-				);
-				break;
-			case 'mssql':
-
-			case 'odbc_mssql':
-				$driverConfig = array(
-					'useNameQuote' => TRUE,
-					'quoteClob' => FALSE
-				);
-				break;
-			case 'mysql':
-				return;
-			}
-			$config = array(
-				'_DEFAULT' => array(
-					'type' => 'adodb',
-					'config' => array(
-						'driver' => $driver,
-						$driverConfig
-					)
-				)
-			);
-			\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->setLocalConfigurationValuesByPathValuePairs(array('EXTCONF/dbal/handlerCfg' => $config));
-			break;
-		}
-	}
-
-	/**
-	 * Creates a specialized form to configure the DBMS connection.
-	 *
-	 * @param array $markers
-	 * @param \TYPO3\CMS\Install\Installer $instObj
-	 * @return void
-	 */
-	protected function createConnectionForm(array &$markers, \TYPO3\CMS\Install\Installer $instObj) {
-		// Normalize current driver
-		if (!$this->driver) {
-			$this->driver = $this->getDefaultDriver();
-		}
-		// Get the template file
-		$templateFile = @file_get_contents((\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('dbal') . $this->templateFilePath . 'install.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Get the subpart for the connection form
-		$formSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###CONNECTION_FORM###');
-		if ($this->getNumberOfAvailableDrivers() == 1 && $this->getDefaultDriver() === 'mysql') {
-			// Only MySQL is actually available (PDO support may be compiled in
-			// PHP itself and as such DBAL was activated, behaves as if DBAL were
-			// not activated
-			$driverSubPart = '<input type="hidden" name="TYPO3_INSTALL[Database][typo_db_driver]" value="mysql" />';
-		} else {
-			$driverTemplate = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($formSubPart, '###DATABASE_DRIVER###');
-			$driverSubPart = $this->prepareDatabaseDrivers($driverTemplate);
-		}
-		$formSubPart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($formSubPart, '###DATABASE_DRIVER###', $driverSubPart);
-		// Get the subpart related to selected database driver
-		if ($this->driver === '' || $this->driver === 'mysql') {
-			$driverOptionsSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###DRIVER_MYSQL###');
-		} else {
-			$driverOptionsSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###DRIVER_' . \TYPO3\CMS\Core\Utility\GeneralUtility::strtoupper($this->driver) . '###');
-			if ($driverOptionsSubPart === '') {
-				$driverOptionsSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###DRIVER_DEFAULT###');
-			}
-		}
-		// Define driver-specific markers
-		$driverMarkers = array();
-		switch ($this->driver) {
-		case 'mssql':
-			$driverMarkers = array(
-				'labelUsername' => 'Username',
-				'username' => TYPO3_db_username,
-				'labelPassword' => 'Password',
-				'password' => TYPO3_db_password,
-				'labelHost' => 'Host',
-				'host' => TYPO3_db_host ? TYPO3_db_host : 'windows',
-				'labelDatabase' => 'Database',
-				'database' => TYPO3_db
-			);
-			$nextStep = $instObj->step + 2;
-			break;
-		case 'odbc_mssql':
-			$driverMarkers = array(
-				'labelUsername' => 'Username',
-				'username' => TYPO3_db_username,
-				'labelPassword' => 'Password',
-				'password' => TYPO3_db_password,
-				'labelHost' => 'Host',
-				'host' => TYPO3_db_host ? TYPO3_db_host : 'windows',
-				'database' => 'dummy_string'
-			);
-			$nextStep = $instObj->step + 2;
-			break;
-		case 'oci8':
-			$driverMarkers = array(
-				'labelUsername' => 'Username',
-				'username' => TYPO3_db_username,
-				'labelPassword' => 'Password',
-				'password' => TYPO3_db_password,
-				'labelHost' => 'Host',
-				'host' => TYPO3_db_host ? TYPO3_db_host : 'localhost',
-				'labelType' => 'Type',
-				'labelSID' => 'SID',
-				'labelServiceName' => 'Service Name',
-				'labelDatabase' => 'Name',
-				'database' => TYPO3_db
-			);
-			$nextStep = $instObj->step + 2;
-			break;
-		case 'postgres':
-			$driverMarkers = array(
-				'labelUsername' => 'Username',
-				'username' => TYPO3_db_username,
-				'labelPassword' => 'Password',
-				'password' => TYPO3_db_password,
-				'labelHost' => 'Host',
-				'host' => TYPO3_db_host ? TYPO3_db_host : 'localhost',
-				'labelDatabase' => 'Database',
-				'database' => TYPO3_db
-			);
-			$nextStep = $instObj->step + 2;
-			break;
-		default:
-			$driverMarkers = array(
-				'labelUsername' => 'Username',
-				'username' => TYPO3_db_username,
-				'labelPassword' => 'Password',
-				'password' => TYPO3_db_password,
-				'labelHost' => 'Host',
-				'host' => TYPO3_db_host ? TYPO3_db_host : 'localhost',
-				'labelDatabase' => 'Database',
-				'database' => TYPO3_db
-			);
-			$nextStep = $instObj->step + 1;
-			break;
-		}
-		// Add header marker for main template
-		$markers['header'] = 'Connect to your database host';
-		// Define the markers content for the subpart
-		$subPartMarkers = array(
-			'step' => $nextStep,
-			'action' => htmlspecialchars($instObj->action),
-			'encryptionKey' => $instObj->createEncryptionKey(),
-			'branch' => TYPO3_branch,
-			'driver_options' => $driverOptionsSubPart,
-			'continue' => 'Continue',
-			'llDescription' => 'If you have not already created a username and password to access the database, please do so now. This can be done using tools provided by your host.'
-		);
-		$subPartMarkers = array_merge($subPartMarkers, $driverMarkers);
-		// Add step marker for main template
-		$markers['step'] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($formSubPart, $subPartMarkers, '###|###', 1, 1);
-	}
-
-	/**
-	 * Prepares the list of database drivers for step 2.
-	 *
-	 * @param string $template
-	 * @return string
-	 */
-	protected function prepareDatabaseDrivers($template) {
-		$subParts = array(
-			'abstractionLayer' => \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###ABSTRACTION_LAYER###'),
-			'vendor' => \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###VENDOR###')
-		);
-		// Create the drop-down list of available drivers
-		$dropdown = '';
-		foreach ($this->availableDrivers as $abstractionLayer => $drivers) {
-			$options = array();
-			foreach ($drivers as $driver => $label) {
-				$markers = array(
-					'driver' => $driver,
-					'labelvendor' => $label,
-					'onclick' => 'document.location=\'index.php?TYPO3_INSTALL[type]=config&mode=123&step=2&driver=' . $driver . '\';',
-					'selected' => ''
-				);
-				if ($driver === $this->driver) {
-					$markers['selected'] .= ' selected="selected"';
-				}
-				$options[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($subParts['vendor'], $markers, '###|###', 1);
-			}
-			$subPart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($subParts['abstractionLayer'], '###VENDOR###', implode('
-', $options));
-			$dropdown .= \TYPO3\CMS\Core\Html\HtmlParser::substituteMarker($subPart, '###LABELABSTRACTIONLAYER###', $abstractionLayer);
-		}
-		$form = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###ABSTRACTION_LAYER###', $dropdown);
-		$form = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarker($form, '###LABELDRIVER###', 'Driver');
-		return $form;
-	}
-
-	/**
-	 * Returns a list of DBAL supported database drivers, with a user-friendly name
-	 * and any PHP module dependency.
-	 *
-	 * @return array
-	 */
-	protected function getSupportedDrivers() {
-		$supportedDrivers = array(
-			'Native' => array(
-				'mysql' => array(
-					'label' => 'MySQL/MySQLi (recommended)',
-					'combine' => 'OR',
-					'extensions' => array('mysql', 'mysqli')
-				),
-				'mssql' => array(
-					'label' => 'Microsoft SQL Server',
-					'extensions' => array('mssql')
-				),
-				'oci8' => array(
-					'label' => 'Oracle OCI8',
-					'extensions' => array('oci8')
-				),
-				'postgres' => array(
-					'label' => 'PostgreSQL',
-					'extensions' => array('pgsql')
-				)
-			),
-			'ODBC' => array(
-				'odbc_mssql' => array(
-					'label' => 'Microsoft SQL Server',
-					'extensions' => array('odbc', 'mssql')
-				)
-			)
-		);
-		return $supportedDrivers;
-	}
-
-	/**
-	 * Returns a list of database drivers that are available on current server.
-	 *
-	 * @return array
-	 */
-	protected function getAvailableDrivers() {
-		$availableDrivers = array();
-		foreach ($this->supportedDrivers as $abstractionLayer => $drivers) {
-			foreach ($drivers as $driver => $info) {
-				if (isset($info['combine']) && $info['combine'] === 'OR') {
-					$isAvailable = FALSE;
-				} else {
-					$isAvailable = TRUE;
-				}
-				// Loop through each PHP module dependency to ensure it is loaded
-				foreach ($info['extensions'] as $extension) {
-					if (isset($info['combine']) && $info['combine'] === 'OR') {
-						$isAvailable |= extension_loaded($extension);
-					} else {
-						$isAvailable &= extension_loaded($extension);
-					}
-				}
-				if ($isAvailable) {
-					if (!isset($availableDrivers[$abstractionLayer])) {
-						$availableDrivers[$abstractionLayer] = array();
-					}
-					$availableDrivers[$abstractionLayer][$driver] = $info['label'];
-				}
-			}
-		}
-		return $availableDrivers;
-	}
-
-	/**
-	 * Returns the number of available drivers.
-	 *
-	 * @return boolean
-	 */
-	protected function getNumberOfAvailableDrivers() {
-		$count = 0;
-		foreach ($this->availableDrivers as $drivers) {
-			$count += count($drivers);
-		}
-		return $count;
-	}
-
-	/**
-	 * Returns the driver that is selected by default in the
-	 * Install Tool dropdown list.
-	 *
-	 * @return string
-	 */
-	protected function getDefaultDriver() {
-		$defaultDriver = '';
-		if (count($this->availableDrivers)) {
-			$abstractionLayers = array_keys($this->availableDrivers);
-			$drivers = array_keys($this->availableDrivers[$abstractionLayers[0]]);
-			$defaultDriver = $drivers[0];
-		}
-		return $defaultDriver;
-	}
-
-	/**
-	 * Creates a specialized form to configure the database.
-	 *
-	 * @param array $markers
-	 * @param \TYPO3\CMS\Install\Installer $instObj
-	 */
-	protected function createDatabaseForm(array &$markers, \TYPO3\CMS\Install\Installer $instObj) {
-		$error_missingConnect = '
-			<p class="typo3-message message-error">
-				<strong>
-					There is no connection to the database!
-				</strong>
-				<br />
-				(Username: <em>' . TYPO3_db_username . '</em>,
-				Host: <em>' . TYPO3_db_host . '</em>,
-				Using Password: YES)
-				<br />
-				Go to Step 1 and enter a valid username and password!
-			</p>
-		';
-		// Add header marker for main template
-		$markers['header'] = 'Select database';
-		// There should be a database host connection at this point
-		if ($result = $GLOBALS['TYPO3_DB']->sql_pconnect(TYPO3_db_host, TYPO3_db_username, TYPO3_db_password)) {
-			// Get the template file
-			$templateFile = @file_get_contents((\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('dbal') . $this->templateFilePath . 'install.html'));
-			// Get the template part from the file
-			$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-			// Get the subpart for the database choice step
-			$formSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###DATABASE_FORM###');
-			// Get the subpart for the database options
-			$step3DatabaseOptionsSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($formSubPart, '###DATABASEOPTIONS###');
-			$dbArr = $instObj->getDatabaseList();
-			$dbIncluded = FALSE;
-			foreach ($dbArr as $dbname) {
-				// Define the markers content for database options
-				$step3DatabaseOptionMarkers = array(
-					'databaseValue' => htmlspecialchars($dbname),
-					'databaseSelected' => $dbname === TYPO3_db ? 'selected="selected"' : '',
-					'databaseName' => htmlspecialchars($dbname)
-				);
-				// Add the option HTML to an array
-				$step3DatabaseOptions[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($step3DatabaseOptionsSubPart, $step3DatabaseOptionMarkers, '###|###', 1, 1);
-				if ($dbname === TYPO3_db) {
-					$dbIncluded = TRUE;
-				}
-			}
-			if (!$dbIncluded && TYPO3_db) {
-				// // Define the markers content when no access
-				$step3DatabaseOptionMarkers = array(
-					'databaseValue' => htmlspecialchars(TYPO3_db),
-					'databaseSelected' => 'selected="selected"',
-					'databaseName' => htmlspecialchars(TYPO3_db) . ' (NO ACCESS!)'
-				);
-				// Add the option HTML to an array
-				$step3DatabaseOptions[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($step3DatabaseOptionsSubPart, $step3DatabaseOptionMarkers, '###|###', 1, 1);
-			}
-			// Substitute the subpart for the database options
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($formSubPart, '###DATABASEOPTIONS###', implode(chr(10), $step3DatabaseOptions));
-			// Define the markers content
-			$step3SubPartMarkers = array(
-				'step' => $instObj->step + 1,
-				'action' => htmlspecialchars($instObj->action),
-				'llOption2' => 'Select an EMPTY existing database:',
-				'llRemark2' => 'Any tables used by TYPO3 will be overwritten.',
-				'continue' => 'Continue'
-			);
-			// Add step marker for main template
-			$markers['step'] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $step3SubPartMarkers, '###|###', 1, 1);
-		} else {
-			// Add step marker for main template when no connection
-			$markers['step'] = $error_missingConnect;
-		}
-	}
-
-}
-
-
-?>
diff --git a/typo3/sysext/dbal/Migrations/Code/ClassAliasMap.php b/typo3/sysext/dbal/Migrations/Code/ClassAliasMap.php
index 9b5e54c3c512..9970a0a054fc 100644
--- a/typo3/sysext/dbal/Migrations/Code/ClassAliasMap.php
+++ b/typo3/sysext/dbal/Migrations/Code/ClassAliasMap.php
@@ -1,9 +1,6 @@
 <?php
 return array(
-	'tx_dbal_autoloader' => 'TYPO3\\CMS\\Dbal\\Autoloader',
 	'tx_dbal_module1' => 'TYPO3\\CMS\\Dbal\\Controller\\ModuleController',
-	'tx_dbal_tsparserext' => 'TYPO3\\CMS\\Dbal\\ExtensionManager\\MessageDisplay',
-	'tx_dbal_installtool' => 'TYPO3\\CMS\\Dbal\\Hooks\\InstallToolHooks',
 	'tx_dbal_querycache' => 'TYPO3\\CMS\\Dbal\\QueryCache',
 	'ux_t3lib_DB' => 'TYPO3\\CMS\\Dbal\\Database\\DatabaseConnection',
 	'ux_t3lib_sqlparser' => 'TYPO3\\CMS\\Dbal\\Database\\SqlParser',
diff --git a/typo3/sysext/dbal/ext_localconf.php b/typo3/sysext/dbal/ext_localconf.php
index 6161921d3204..2803b18274fd 100644
--- a/typo3/sysext/dbal/ext_localconf.php
+++ b/typo3/sysext/dbal/ext_localconf.php
@@ -7,11 +7,6 @@ $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\\CMS\\Core\\Database\\Datab
 $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\\CMS\\Core\\Database\\SqlParser'] = array('className' => 'TYPO3\\CMS\\Dbal\\Database\\SqlParser');
 $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\\CMS\\Recordlist\\RecordList\\DatabaseRecordList'] = array('className' => 'TYPO3\\CMS\\Dbal\\RecordList\\DatabaseRecordList');
 
-// Register a hook for the installer
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['stepOutput'][] = 'TYPO3\\CMS\\Dbal\\Hooks\\InstallToolHooks';
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['writeLocalconf'][] = 'TYPO3\\CMS\\Dbal\\Hooks\\InstallToolHooks';
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['requiredPhpModules'][] = 'TYPO3\\CMS\\Dbal\\Hooks\\InstallToolHooks';
-
 // Register caches if not already done in localconf.php or a previously loaded extension.
 if (!is_array($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['dbal'])) {
 	$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['dbal'] = array(
diff --git a/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php b/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php
index 9870dd2bba45..cd0d23331287 100644
--- a/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php
+++ b/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php
@@ -39,7 +39,7 @@ class InstallUtility implements \TYPO3\CMS\Core\SingletonInterface {
 	public $objectManager;
 
 	/**
-	 * @var \TYPO3\CMS\Install\Sql\SchemaMigrator
+	 * @var \TYPO3\CMS\Install\Service\SqlSchemaMigrationService
 	 */
 	public $installToolSqlParser;
 
@@ -115,8 +115,8 @@ class InstallUtility implements \TYPO3\CMS\Core\SingletonInterface {
 	 */
 	public function __construct() {
 		$this->objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
-		/** @var $installToolSqlParser \TYPO3\CMS\Install\Sql\SchemaMigrator */
-		$this->installToolSqlParser = $this->objectManager->get('TYPO3\\CMS\\Install\\Sql\\SchemaMigrator');
+		/** @var $installToolSqlParser \TYPO3\CMS\Install\Service\SqlSchemaMigrationService */
+		$this->installToolSqlParser = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SqlSchemaMigrationService');
 		$this->dependencyUtility = $this->objectManager->get('TYPO3\\CMS\\Extensionmanager\\Utility\\DependencyUtility');
 	}
 
diff --git a/typo3/sysext/install/Classes/CheckTheDatabaseHookInterface.php b/typo3/sysext/install/Classes/CheckTheDatabaseHookInterface.php
deleted file mode 100644
index 1492435df6c2..000000000000
--- a/typo3/sysext/install/Classes/CheckTheDatabaseHookInterface.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install;
-
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2011-2013 Thomas Maroschik <tmaroschik@dfau.de>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-/**
- * Interface for hook in tx_install::checkTheDatabase
- *
- * @author Thomas Maroschik <tmaroschik@dfau.de>
- */
-interface CheckTheDatabaseHookInterface
-{
-	/**
-	 * Hook that allows to dynamically extend the table definitions on a per extension base
-	 * for e.g. custom caches. The hook implementation may return table create strings that
-	 * will be respected by the install tool.
-	 *
-	 * @param string $extKey: Extension key
-	 * @param array $loadedExtConf: The extension's configuration from $GLOBALS['TYPO3_LOADED_EXT']
-	 * @param string $extensionSqlContent: The content of the extensions ext_tables.sql
-	 * @param \TYPO3\CMS\Install\Sql\SchemaMigrator $instSqlObj: Instance of the installer sql object
-	 * @param tx_em_Install $parent: The calling parent object
-	 * @return string Either empty string or table create strings
-	 */
-	public function appendExtensionTableDefinitions($extKey, array $loadedExtConf, $extensionSqlContent, \TYPO3\CMS\Install\Sql\SchemaMigrator $instSqlObj, \TYPO3\CMS\Install\Installer $parent);
-
-	/**
-	 * Hook that allows to dynamically extend the table definitions for the whole system
-	 * for e.g. custom caches. The hook implementation may return table create strings that
-	 * will be respected by the install tool.
-	 *
-	 * @param string $allSqlContent: The content of all relevant sql files
-	 * @param \TYPO3\CMS\Install\Sql\SchemaMigrator $instSqlObj: Instance of the installer sql object
-	 * @param tx_em_Install $parent: The calling parent object
-	 * @return string Either empty string or table create strings
-	 */
-	public function appendGlobalTableDefinitions($allSqlContent, \TYPO3\CMS\Install\Sql\SchemaMigrator $instSqlObj, \TYPO3\CMS\Install\Installer $parent);
-
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/AbstractController.php b/typo3/sysext/install/Classes/Controller/AbstractController.php
new file mode 100644
index 000000000000..cd8ff057371d
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/AbstractController.php
@@ -0,0 +1,510 @@
+<?php
+namespace TYPO3\CMS\Install\Controller;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Controller abstract for shared parts of Tool and Step controller
+ */
+class AbstractController {
+
+	/**
+	 * @var \TYPO3\CMS\Extbase\Object\ObjectManager
+	 */
+	protected $objectManager = NULL;
+
+	/**
+	 * @var \TYPO3\CMS\Install\Service\SessionService
+	 */
+	protected $session = NULL;
+
+	/**
+	 * @var array List of valid action names that need authentication
+	 */
+	protected $authenticationActions = array();
+
+	/**
+	 * Guard method checking typo3conf/ENABLE_INSTALL_TOOL
+	 *
+	 * Checking ENABLE_INSTALL_TOOL validity is simple:
+	 * As soon as there is a typo3conf directory at all (not step 1 of "first install"),
+	 * the file must be there and valid in order to proceed.
+	 *
+	 * @return void
+	 */
+	protected function outputInstallToolNotEnabledMessageIfNeeded() {
+		if (is_dir(PATH_typo3conf)) {
+			/** @var \TYPO3\CMS\Install\Service\EnableFileService $installToolEnableService */
+			$installToolEnableService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\EnableFileService');
+			if (!$installToolEnableService->checkInstallToolEnableFile()) {
+				/** @var \TYPO3\CMS\Install\Controller\Action\ActionInterface $action */
+				$action = $this->objectManager->get('TYPO3\\CMS\\Install\\Controller\\Action\\Common\\InstallToolDisabledAction');
+				$action->setController('common');
+				$action->setAction('installToolDisabled');
+				$this->output($action->handle());
+			}
+		}
+	}
+
+	/**
+	 * Guard method checking for valid install tool password
+	 *
+	 * If installation is completed - LocalConfiguration exists and
+	 * installProcess is not running, and installToolPassword must be set
+	 */
+	protected function outputInstallToolPasswordNotSetMessageIfNeeded() {
+		if (!$this->isInitialInstallationInProgress()
+			&& (empty($GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword']))
+		) {
+			/** @var \TYPO3\CMS\Install\Controller\Action\ActionInterface $action */
+			$action = $this->objectManager->get('TYPO3\\CMS\\Install\\Controller\\Action\\Common\\InstallToolPasswordNotSetAction');
+			$action->setController('common');
+			$action->setAction('installToolPasswordNotSet');
+			$this->output($action->handle());
+		}
+	}
+
+	/**
+	 * Use form protection API to find out if protected POST forms are ok.
+	 *
+	 * @throws Exception
+	 * @return void
+	 */
+	protected function checkSessionToken() {
+		$postValues = $this->getPostValues();
+		$tokenOk = FALSE;
+		if (count($postValues) > 0) {
+			// A token must be given as soon as there is POST data
+			if (isset($postValues['token'])) {
+				/** @var $formProtection \TYPO3\CMS\Core\FormProtection\InstallToolFormProtection */
+				$formProtection = \TYPO3\CMS\Core\FormProtection\FormProtectionFactory::get(
+					'TYPO3\\CMS\\Core\\FormProtection\\InstallToolFormProtection'
+				);
+				$action = $this->getAction();
+				if ($action === '') {
+					throw new Exception(
+						'No POST action given for token check',
+						1369326593
+					);
+				}
+				$tokenOk = $formProtection->validateToken($postValues['token'], 'installTool', $action);
+			}
+		} else {
+			$tokenOk = TRUE;
+		}
+
+		if (!$tokenOk) {
+			$this->session->resetSession();
+			$this->session->startSession();
+
+			if ($this->isInitialInstallationInProgress()) {
+				$this->redirect();
+			} else {
+				/** @var $message \TYPO3\CMS\Install\Status\ErrorStatus */
+				$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+				$message->setTitle('Invalid form token');
+				$message->setMessage(
+					'The form protection token was invalid. You have been logged out, please login and try again.'
+				);
+				$this->output($this->loginForm($message));
+			}
+		}
+	}
+
+	/**
+	 * Check if session expired.
+	 *
+	 * @return void
+	 */
+	protected function checkSessionLifetime() {
+		if ($this->session->isExpired()) {
+			// Session expired, log out user, start new session
+			$this->session->resetSession();
+			$this->session->startSession();
+
+			if ($this->isInitialInstallationInProgress()) {
+				$this->redirect();
+			} else {
+				/** @var $message \TYPO3\CMS\Install\Status\ErrorStatus */
+				$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+				$message->setTitle('Session expired');
+				$message->setMessage(
+					'Your Install Tool session has expired. You have been logged out, please login and try again.'
+				);
+				$this->output($this->loginForm($message));
+			}
+		}
+	}
+
+	/**
+	 * Show login form
+	 *
+	 * @param \TYPO3\CMS\Install\Status\StatusInterface $message Optional status message from controller
+	 * @return string Rendered HTML
+	 */
+	protected function loginForm(\TYPO3\CMS\Install\Status\StatusInterface $message = NULL) {
+		/** @var \TYPO3\CMS\Install\Controller\Action\Common\LoginForm $action */
+		$action = $this->objectManager->get('TYPO3\\CMS\\Install\\Controller\\Action\\Common\\LoginForm');
+		$action->setController('common');
+		$action->setAction('login');
+		$action->setToken($this->generateTokenForAction('login'));
+		$action->setPostValues($this->getPostValues());
+		if ($message) {
+			$action->setMessages(array($message));
+		}
+		$content = $action->handle();
+		return $content;
+	}
+
+	/**
+	 * Validate install tool password and login user if requested
+	 *
+	 * @return void
+	 */
+	protected function loginIfRequested() {
+		$action = $this->getAction();
+		$postValues = $this->getPostValues();
+		if ($action === 'login') {
+			if (isset($postValues['values']['password'])
+				&& md5($postValues['values']['password']) === $GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword']
+			) {
+				$this->session->setAuthorized();
+				$this->sendLoginSuccessfulMail();
+				$this->redirect();
+			} else {
+				/** @var $message \TYPO3\CMS\Install\Status\ErrorStatus */
+				$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+				$message->setTitle('Login failed');
+				$message->setMessage('Given password does not match the install tool login password.');
+				$this->sendLoginFailedMail();
+				$this->output($this->loginForm($message));
+			}
+		}
+	}
+
+	/**
+	 * Show login for if user is not authorized yet and if
+	 * not in first installation process.
+	 *
+	 * @return void
+	 */
+	protected function outputLoginFormIfNotAuthorized() {
+		if (!$this->session->isAuthorized()
+			&& !$this->isInitialInstallationInProgress()
+		) {
+			$this->output($this->loginForm());
+		} else {
+			$this->session->refreshSession();
+		}
+	}
+
+	/**
+	 * If install tool login mail is set, send a mail for a successful login.
+	 * This is currently straight ahead code and could be improved.
+	 *
+	 * @return void
+	 */
+	protected function sendLoginSuccessfulMail() {
+		$warningEmailAddress = $GLOBALS['TYPO3_CONF_VARS']['BE']['warning_email_addr'];
+		if ($warningEmailAddress) {
+			$subject = 'Install Tool Login at \'' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . '\'';
+			$body =
+				'There has been an Install Tool login at TYPO3 site'
+				. ' \'' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . '\''
+				. ' (' . GeneralUtility::getIndpEnv('HTTP_HOST') . ')'
+				. ' from remote address \'' . GeneralUtility::getIndpEnv('REMOTE_ADDR') . '\''
+				. ' (' . GeneralUtility::getIndpEnv('REMOTE_HOST') . ')';
+			mail($warningEmailAddress, $subject, $body, 'From: TYPO3 Install Tool WARNING <>');
+		}
+	}
+
+	/**
+	 * If install tool login mail is set, send a mail for a failed login.
+	 * This is currently straight ahead code and could be improved.
+	 *
+	 * @return void
+	 */
+	protected function sendLoginFailedMail() {
+		$formValues = GeneralUtility::_GP('install');
+		$warningEmailAddress = $GLOBALS['TYPO3_CONF_VARS']['BE']['warning_email_addr'];
+		if ($warningEmailAddress) {
+			$subject = 'Install Tool Login ATTEMPT at \'' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . '\'';
+			$body =
+				'There has been an Install Tool login attempt at TYPO3 site'
+				. ' \'' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . '\''
+				. ' (' . GeneralUtility::getIndpEnv('HTTP_HOST') . ')'
+				. ' The MD5 hash of the last 5 characters of the password tried was \'' . substr(md5($formValues['password']), -5) . '\''
+				. ' remote addres was \'' . GeneralUtility::getIndpEnv('REMOTE_ADDR') . '\''
+				. ' (' . GeneralUtility::getIndpEnv('REMOTE_HOST') . ')';
+			mail($warningEmailAddress, $subject, $body, 'From: TYPO3 Install Tool WARNING <>');
+		}
+	}
+
+	/**
+	 * Generate token for specific action
+	 *
+	 * @param string $action Action name
+	 * @return string Form protection token
+	 * @throws Exception
+	 */
+	protected function generateTokenForAction($action = NULL) {
+		if (!$action) {
+			$action = $this->getAction();
+		}
+		if ($action === '') {
+			throw new Exception(
+				'Token must have a valid action name',
+				1369326592
+			);
+		}
+		/** @var $formProtection \TYPO3\CMS\Core\FormProtection\InstallToolFormProtection */
+		$formProtection = \TYPO3\CMS\Core\FormProtection\FormProtectionFactory::get(
+			'TYPO3\\CMS\\Core\\FormProtection\\InstallToolFormProtection'
+		);
+		return $formProtection->generateToken('installTool', $action);
+	}
+
+	/**
+	 * First installation is in progress, if LocalConfiguration does not exist,
+	 * or if isInitialInstallationInProgress is not set or FALSE.
+	 *
+	 * @return boolean TRUE if installation is in progress
+	 */
+	protected function isInitialInstallationInProgress() {
+		/** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
+		$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+
+		$localConfigurationFileLocation = $configurationManager->getLocalConfigurationFileLocation();
+		$localConfigurationFileExists = @is_file($localConfigurationFileLocation);
+		$result = FALSE;
+		if (!$localConfigurationFileExists
+			|| !empty($GLOBALS['TYPO3_CONF_VARS']['SYS']['isInitialInstallationInProgress'])
+		) {
+			$result = TRUE;
+		}
+		return $result;
+	}
+
+	/**
+	 * Initialize session object.
+	 * Subclass will throw exception if session can not be created or if
+	 * preconditions like a valid encryption key are not set.
+	 *
+	 * @return void
+	 */
+	protected function initializeSession() {
+		/** @var \TYPO3\CMS\Install\Service\SessionService $session */
+		$this->session = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SessionService');
+		if (!$this->session->hasSession()) {
+			$this->session->startSession();
+		}
+	}
+
+	/**
+	 * Add status messages to session.
+	 * Used to output messages between requests, especially in step controller
+	 *
+	 * @param array<\TYPO3\CMS\Install\Status\StatusInterface> $messages
+	 */
+	protected function addSessionMessages(array $messages) {
+		foreach ($messages as $message) {
+			$this->session->addMessage($message);
+		}
+	}
+
+	/**
+	 * Initialize extbase object manager for fluid rendering
+	 *
+	 * @return void
+	 */
+	protected function initializeObjectManager() {
+		/** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */
+		$objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
+		$this->objectManager = $objectManager;
+	}
+
+	/**
+	 * Require dbal ext_localconf if extension is loaded
+	 * Required extbase + fluid ext_localconf
+	 * Set caching to null, we do not want dbal, fluid or extbase to cache anything
+	 *
+	 * @return void
+	 */
+	protected function loadBaseExtensions() {
+		if ($this->isDbalEnabled()) {
+			require(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('dbal') . 'ext_localconf.php');
+			$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['dbal']['backend']
+				= 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
+		}
+
+		require(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('extbase') . 'ext_localconf.php');
+		require(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('fluid') . 'ext_localconf.php');
+
+		$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['extbase_datamapfactory_datamap']['backend']
+			= 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
+		$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['extbase_object']['backend']
+			= 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
+		$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['extbase_reflection']['backend']
+			= 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
+		$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['extbase_typo3dbbackend_tablecolumns']['backend']
+			= 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
+		$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['fluid_template']['backend']
+			= 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
+
+		/** @var $cacheManager \TYPO3\CMS\Core\Cache\CacheManager */
+		$cacheManager = $GLOBALS['typo3CacheManager'];
+		$cacheManager->setCacheConfigurations($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']);
+	}
+
+	/**
+	 * Return TRUE if dbal and adodb extension is loaded.
+	 *
+	 * @return boolean TRUE if dbal and adodb is loaded
+	 */
+	protected function isDbalEnabled() {
+		if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('adodb')
+			&& \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('dbal')
+		) {
+			return TRUE;
+		}
+		return FALSE;
+	}
+
+	/**
+	 * Check given action name is one of the allowed actions.
+	 *
+	 * @param string $action Given action to validate
+	 * @throws Exception
+	 */
+	protected function validateAuthenticationAction($action) {
+		if (!in_array($action, $this->authenticationActions)) {
+			throw new Exception(
+				$action . ' is not a valid authentication action',
+				1369345838
+			);
+		}
+	}
+
+	/**
+	 * Retrieve parameter from GET or POST and sanitize
+	 *
+	 * @throws Exception
+	 * @return string Empty string if no action is given or sanitized action string
+	 */
+	protected function getAction() {
+		$formValues = GeneralUtility::_GP('install');
+		$action = '';
+		if (isset($formValues['action'])) {
+			$action = $formValues['action'];
+		}
+		if ($action !== ''
+			&& $action !== 'login'
+			&& $action !== 'loginForm'
+			&& $action !== 'logout'
+			&& !in_array($action, $this->authenticationActions)
+		) {
+			throw new Exception(
+				'Invalid action ' . $action,
+				1369325619
+			);
+		}
+		return $action;
+	}
+
+	/**
+	 * Get POST form values of install tool.
+	 * All POST data is secured by form token protection, except in very installation step.
+	 *
+	 * @return array
+	 */
+	protected function getPostValues() {
+		$postValues = GeneralUtility::_POST('install');
+		if (!is_array($postValues)) {
+			$postValues = array();
+		}
+		return $postValues;
+	}
+
+	/**
+	 * HTTP redirect to self, preserving allowed GET variables.
+	 * WARNING: This exits the script execution!
+	 *
+	 * @param string $controller Can be set to 'tool' to redirect from step to tool controller
+	 * @param string $action Set specific action for next request, used in step controller to specify next step
+	 * @return void
+	 */
+	protected function redirect($controller = '', $action = '') {
+		$getPostValues = GeneralUtility::_GP('install');
+
+		$parameters = array();
+
+		// Add context parameter in case this script was called within backend scope
+		$context = 'install[context]=standalone';
+		if (isset($getPostValues['context']) && $getPostValues['context'] === 'backend') {
+			$context = 'install[context]=backend';
+		}
+		$parameters[] = $context;
+
+		// Add controller parameter
+		$controllerParameter = 'install[controller]=step';
+		if ((isset($getPostValues['controller']) && $getPostValues['controller'] === 'tool')
+			|| $controller === 'tool'
+		) {
+			$controllerParameter = 'install[controller]=tool';
+		}
+		$parameters[] = $controllerParameter;
+
+		// Add action if specified
+		if (strlen($action) > 0) {
+			$parameters[] = 'install[action]=' . $action;
+		}
+
+		$redirectLocation= 'Install.php?' . implode('&', $parameters);
+
+		\TYPO3\CMS\Core\Utility\HttpUtility::redirect(
+			$redirectLocation,
+			\TYPO3\CMS\Core\Utility\HttpUtility::HTTP_STATUS_303
+		);
+	}
+
+	/**
+	 * Output content.
+	 * WARNING: This exits the script execution!
+	 *
+	 * @param string $content Content to output
+	 */
+	protected function output($content = '') {
+		header('Content-Type: text/html; charset=utf-8');
+		header('Cache-Control: no-cache, must-revalidate');
+		header('Pragma: no-cache');
+		echo $content;
+		die;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/Action/AbstractAction.php b/typo3/sysext/install/Classes/Controller/Action/AbstractAction.php
new file mode 100644
index 000000000000..df894b28ad2c
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/AbstractAction.php
@@ -0,0 +1,211 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * General purpose controller action helper methods and bootstrap
+ */
+abstract class AbstractAction {
+
+	/**
+	 * @var \TYPO3\CMS\Extbase\Object\ObjectManager
+	 * @inject
+	 */
+	protected $objectManager = NULL;
+
+	/**
+	 * @var \TYPO3\CMS\Install\View\StandaloneView
+	 * @inject
+	 */
+	protected $view = NULL;
+
+	/**
+	 * @var string Name of controller. One of the strings 'step', 'tool' or 'common'
+	 */
+	protected $controller = '';
+
+	/**
+	 * @var string Name of target action, set by controller
+	 */
+	protected $action = '';
+
+	/**
+	 * @var string Form token for CSRF protection
+	 */
+	protected $token = '';
+
+	/**
+	 * @var array Values in $_POST['install']
+	 */
+	protected $postValues = array();
+
+	/**
+	 * @var array<\TYPO3\CMS\Install\Status\StatusInterface> Optional status message from controller
+	 */
+	protected $messages = array();
+
+	/**
+	 * Initialize this action
+	 *
+	 * @return string content
+	 */
+	protected function initialize() {
+		$viewRootPath = GeneralUtility::getFileAbsFileName('EXT:install/Resources/Private/');
+		$controllerActionDirectoryName = ucfirst($this->controller);
+		$mainTemplate = ucfirst($this->action);
+		$this->view->setTemplatePathAndFilename($viewRootPath . 'Templates/Action/' . $controllerActionDirectoryName . '/' . $mainTemplate . '.html');
+		$this->view->setLayoutRootPath($viewRootPath . 'Layouts/');
+		$this->view->setPartialRootPath($viewRootPath . 'Partials/');
+		$this->view
+			// time is used in js and css as parameter to force loading of resources
+			->assign('time', time())
+			->assign('action', $this->action)
+			->assign('controller', $this->controller)
+			->assign('token', $this->token)
+			->assign('context', $this->getContext())
+			->assign('messages', $this->messages)
+			->assign('typo3Version', TYPO3_version)
+			->assign('siteName', $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']);
+	}
+
+	/**
+	 * Set form protection token
+	 *
+	 * @param string $token Form protection token
+	 * @return void
+	 */
+	public function setToken($token) {
+		$this->token = $token;
+	}
+
+	/**
+	 * Set action group. Either string 'step', 'tool' or 'common'
+	 *
+	 * @param string $controller Controller name
+	 * @return void
+	 */
+	public function setController($controller) {
+		$this->controller = $controller;
+	}
+
+	/**
+	 * Set action name. This is usually similar to the class name,
+	 * only for loginForm, the action is login
+	 *
+	 * @param string $action Name of target action for forms
+	 * @return void
+	 */
+	public function setAction($action) {
+		$this->action = $action;
+	}
+
+	/**
+	 * Set POST form values of install tool
+	 *
+	 * @param array $postValues
+	 * @return void
+	 */
+	public function setPostValues(array $postValues) {
+		$this->postValues = $postValues;
+	}
+
+	/**
+	 * Status messages from controller
+	 *
+	 * @param array<\TYPO3\CMS\Install\Status\StatusInterface> $messages
+	 */
+	public function setMessages(array $messages = array()) {
+		$this->messages = $messages;
+	}
+
+	/**
+	 * Return TRUE if dbal and adodb extension is loaded
+	 *
+	 * @return boolean TRUE if dbal and adodb is loaded
+	 */
+	protected function isDbalEnabled() {
+		if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('adodb')
+			&& \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('dbal')
+		) {
+			return TRUE;
+		}
+		return FALSE;
+	}
+
+	/**
+	 * Context determines if the install tool is called within backend or standalone
+	 *
+	 * @return string Either 'standalone' or 'backend'
+	 */
+	protected function getContext() {
+		$context = 'standalone';
+		$formValues = GeneralUtility::_GP('install');
+		if (isset($formValues['context'])) {
+			$context = $formValues['context'] === 'backend' ? 'backend' : 'standalone';
+		}
+		return $context;
+	}
+
+	/**
+	 * Get database instance.
+	 * Will be initialized if it does not exist yet.
+	 *
+	 * @return \TYPO3\CMS\Core\Database\DatabaseConnection
+	 */
+	protected function getDatabase() {
+		static $database;
+		if (!is_object($database)) {
+			/** @var \TYPO3\CMS\Core\Database\DatabaseConnection $database */
+			$database = $this->objectManager->get('TYPO3\\CMS\\Core\\Database\\DatabaseConnection');
+			$database->setDatabaseUsername($GLOBALS['TYPO3_CONF_VARS']['DB']['username']);
+			$database->setDatabasePassword($GLOBALS['TYPO3_CONF_VARS']['DB']['password']);
+			$database->setDatabaseHost($GLOBALS['TYPO3_CONF_VARS']['DB']['host']);
+			$database->setDatabasePort($GLOBALS['TYPO3_CONF_VARS']['DB']['port']);
+			$database->setDatabaseName($GLOBALS['TYPO3_CONF_VARS']['DB']['database']);
+			$database->connectDB();
+		}
+		return $database;
+	}
+
+	/**
+	 * Some actions like the database analyzer and the upgrade wizards need additional
+	 * bootstrap actions performed.
+	 *
+	 * Those actions can potentially fatal if some old extension is loaded that triggers
+	 * a fatal in ext_localconf or ext_tables code! Use only if really needed.
+	 *
+	 * @return void
+	 */
+	protected function loadExtLocalconfDatabaseAndExtTables() {
+		\TYPO3\CMS\Core\Core\Bootstrap::getInstance()
+			->loadTypo3LoadedExtAndExtLocalconf(FALSE)
+			->applyAdditionalConfigurationSettings()
+			->initializeTypo3DbGlobal()
+			->loadExtensionTables(FALSE);
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/Controller/Action/ActionInterface.php b/typo3/sysext/install/Classes/Controller/Action/ActionInterface.php
new file mode 100644
index 000000000000..0b69ec0bb985
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/ActionInterface.php
@@ -0,0 +1,79 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * General action interface
+ */
+interface ActionInterface {
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string rendered content
+	 */
+	public function handle();
+
+	/**
+	 * Set form protection token
+	 *
+	 * @param string $token Form protection token
+	 * @return void
+	 */
+	public function setToken($token);
+
+	/**
+	 * Set controller, Either string 'step', 'tool' or 'common'
+	 *
+	 * @param string $controller Controller name
+	 * @return void
+	 */
+	public function setController($controller);
+
+	/**
+	 * Set action name. This is usually similar to the class name,
+	 * only for loginForm, the action is login
+	 *
+	 * @param string $action Name of target action for forms
+	 * @return void
+	 */
+	public function setAction($action);
+
+	/**
+	 * Set POST values
+	 *
+	 * @param array $postValues List of values submitted via POST
+	 * @return void
+	 */
+	public function setPostValues(array $postValues);
+
+	/**
+	 * Status messages from controller
+	 *
+	 * @param array<\TYPO3\CMS\Install\Status\StatusInterface> $messages
+	 */
+	public function setMessages(array $messages = array());
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/Action/Common/InstallToolDisabledAction.php b/typo3/sysext/install/Classes/Controller/Action/Common/InstallToolDisabledAction.php
new file mode 100644
index 000000000000..0dd05c23ea5f
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Common/InstallToolDisabledAction.php
@@ -0,0 +1,44 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Common;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+
+/**
+ * Welcome page
+ */
+class InstallToolDisabledAction extends Action\AbstractAction implements Action\ActionInterface {
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string content
+	 */
+	public function handle() {
+		$this->initialize();
+		return $this->view->render();
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/Controller/Action/Common/InstallToolPasswordNotSetAction.php b/typo3/sysext/install/Classes/Controller/Action/Common/InstallToolPasswordNotSetAction.php
new file mode 100644
index 000000000000..00e96e090951
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Common/InstallToolPasswordNotSetAction.php
@@ -0,0 +1,44 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Common;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+
+/**
+ * Welcome page
+ */
+class InstallToolPasswordNotSetAction extends Action\AbstractAction implements Action\ActionInterface {
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string content
+	 */
+	public function handle() {
+		$this->initialize();
+		return $this->view->render();
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/Controller/Action/Common/LoginForm.php b/typo3/sysext/install/Classes/Controller/Action/Common/LoginForm.php
new file mode 100644
index 000000000000..9db3b4cd2c9e
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Common/LoginForm.php
@@ -0,0 +1,45 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Common;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+
+/**
+ * Show login form
+ */
+class LoginForm extends Action\AbstractAction implements Action\ActionInterface {
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string content
+	 */
+	public function handle() {
+		$this->initialize();
+		$this->view->assign('messages', $this->messages);
+		return $this->view->render();
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/Controller/Action/Step/DatabaseConnect.php b/typo3/sysext/install/Classes/Controller/Action/Step/DatabaseConnect.php
new file mode 100644
index 000000000000..b43d60dc1358
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Step/DatabaseConnect.php
@@ -0,0 +1,491 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Step;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+
+/**
+ * Database connect step:
+ * - Needs execution if database credentials are not set or fail to connect
+ * - Renders fields for database connection fields
+ * - Sets database credentials in LocalConfiguration
+ * - Loads / unloads ext:dbal and ext:adodb if requested
+ */
+class DatabaseConnect extends Action\AbstractAction implements StepInterface {
+
+	/**
+	 * Execute database step:
+	 * - Load / unload dbal & adodb
+	 * - Set database connect credentials in LocalConfiguration
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function execute() {
+		$result = array();
+
+		/** @var $configurationManager \TYPO3\CMS\Core\Configuration\ConfigurationManager */
+		$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+
+		$postValues = $this->postValues['values'];
+		if (isset($postValues['loadDbal'])) {
+			$result[] = $this->executeLoadDbalExtension();
+		} elseif ($postValues['unloadDbal']) {
+			$result[] = $this->executeUnloadDbalExtension();
+		} elseif ($postValues['setDbalDriver']) {
+			$driver = $postValues['setDbalDriver'];
+			switch ($driver) {
+				case 'mssql':
+				case 'odbc_mssql':
+					$driverConfig = array(
+						'useNameQuote' => TRUE,
+						'quoteClob' => FALSE,
+					);
+					break;
+				case 'oci8':
+					$driverConfig = array(
+						'driverOptions' => array(
+							'connectSID' => '',
+						),
+					);
+					break;
+			}
+			$config = array(
+				'_DEFAULT' => array(
+					'type' => 'adodb',
+					'config' => array(
+						'driver' => $driver,
+					)
+				)
+			);
+			if (isset($driverConfig)) {
+				$config['_DEFAULT']['config'] = array_merge($config['_DEFAULT']['config'], $driverConfig);
+			}
+			$configurationManager->setLocalConfigurationValueByPath('EXTCONF/dbal/handlerCfg', $config);
+		} else {
+			$localConfigurationPathValuePairs = array();
+
+			if ($this->isDbalEnabled()) {
+				$config = $configurationManager->getConfigurationValueByPath('EXTCONF/dbal/handlerCfg');
+				$driver = $config['_DEFAULT']['config']['driver'];
+				if ($driver === 'oci8') {
+					$configurationManager['_DEFAULT']['config']['driverOptions']['connectSID']
+						= $postValues['type'] === 'sid' ? TRUE : FALSE;
+				}
+			}
+
+			if (isset($postValues['username'])) {
+				$value = $postValues['username'];
+				if (strlen($value) <= 50) {
+					$localConfigurationPathValuePairs['DB/username'] = $value;
+				} else {
+					/** @var $errorStatus \TYPO3\CMS\Install\Status\ErrorStatus */
+					$errorStatus = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+					$errorStatus->setTitle('Database username not valid');
+					$errorStatus->setMessage('Given username must be shorter than fifty characters.');
+					$result[] = $errorStatus;
+				}
+			}
+
+			if (isset($postValues['password'])) {
+				$value = $postValues['password'];
+				if (strlen($value) <= 50) {
+					$localConfigurationPathValuePairs['DB/password'] = $value;
+				} else {
+					/** @var $errorStatus \TYPO3\CMS\Install\Status\ErrorStatus */
+					$errorStatus = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+					$errorStatus->setTitle('Database password not valid');
+					$errorStatus->setMessage('Given password must be shorter than fifty characters.');
+					$result[] = $errorStatus;
+				}
+			}
+
+			if (isset($postValues['host'])) {
+				$value = $postValues['host'];
+				if (preg_match('/^[a-zA-Z0-9_\\.-]+(:.+)?$/', $value) && strlen($value) <= 50) {
+					$localConfigurationPathValuePairs['DB/host'] = $value;
+				} else {
+					/** @var $errorStatus \TYPO3\CMS\Install\Status\ErrorStatus */
+					$errorStatus = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+					$errorStatus->setTitle('Database host not valid');
+					$errorStatus->setMessage('Given host is not alphanumeric (a-z, A-Z, 0-9 or _-.:) or longer than fifty characters.');
+					$result[] = $errorStatus;
+				}
+			}
+
+			if (isset($postValues['port'])) {
+				$value = $postValues['port'];
+				if (preg_match('/^[0-9]+(:.+)?$/', $value) && $value > 0 && $value <= 65535) {
+					$localConfigurationPathValuePairs['DB/port'] = (int)$value;
+				} else {
+					/** @var $errorStatus \TYPO3\CMS\Install\Status\ErrorStatus */
+					$errorStatus = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+					$errorStatus->setTitle('Database port not valid');
+					$errorStatus->setMessage('Given port is not numeric or within range 1 to 65535');
+					$result[] = $errorStatus;
+				}
+			}
+
+			if (isset($postValues['database'])) {
+				$value = $postValues['database'];
+				if (strlen($value) <= 50) {
+					$localConfigurationPathValuePairs['DB/database'] = $value;
+				} else {
+					/** @var $errorStatus \TYPO3\CMS\Install\Status\ErrorStatus */
+					$errorStatus = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+					$errorStatus->setTitle('Database name not valid');
+					$errorStatus->setMessage('Given database name must be shorter than fifty characters.');
+					$result[] = $errorStatus;
+				}
+			}
+
+			if (!empty($localConfigurationPathValuePairs)) {
+				$configurationManager->setLocalConfigurationValuesByPathValuePairs($localConfigurationPathValuePairs);
+
+				// After setting new credentials, test again and create an error message if connect is not successful
+				// @TODO: This could be simplified, if isConnectSuccessful could be released from TYPO3_CONF_VARS
+				// and feeded with connect values directly in order to obsolete the bootstrap reload.
+				\TYPO3\CMS\Core\Core\Bootstrap::getInstance()
+					->populateLocalConfiguration()
+					->setCoreCacheToNullBackend();
+				if ($this->isDbalEnabled()) {
+					require(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('dbal') . 'ext_localconf.php');
+					$GLOBALS['typo3CacheManager']->setCacheConfigurations($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']);
+				}
+				if (!$this->isConnectSuccessful()) {
+					/** @var $errorStatus \TYPO3\CMS\Install\Status\ErrorStatus */
+					$errorStatus = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+					$errorStatus->setTitle('Database connect not successful');
+					$errorStatus->setMessage('Connecting the database with given settings failed. Please check.');
+					$result[] = $errorStatus;
+				}
+			}
+		}
+
+		return $result;
+	}
+
+	/**
+	 * Step needs to be executed if database connection is not successful.
+	 *
+	 * @return boolean
+	 */
+	public function needsExecution() {
+		if (!$this->isConnectSuccessful()) {
+			return TRUE;
+		}
+		if (!isset($GLOBALS['TYPO3_CONF_VARS']['DB']['host'])
+			|| !isset($GLOBALS['TYPO3_CONF_VARS']['DB']['port'])
+		) {
+			return TRUE;
+		}
+		return FALSE;
+	}
+
+	/**
+	 * Render this step
+	 *
+	 * @return string
+	 */
+	public function handle() {
+		$this->initialize();
+
+		$isDbalEnabled = $this->isDbalEnabled();
+		$this->view
+			->assign('isDbalEnabled', $isDbalEnabled)
+			->assign('username', $GLOBALS['TYPO3_CONF_VARS']['DB']['username'] ?: '')
+			->assign('password', $GLOBALS['TYPO3_CONF_VARS']['DB']['password'] ?: '')
+			->assign('host', $this->getConfiguredHost() ?: '127.0.0.1')
+			->assign('port', $this->getConfiguredOrDefaultPort())
+			->assign('database', $GLOBALS['TYPO3_CONF_VARS']['DB']['database'] ?: '');
+
+		if ($isDbalEnabled) {
+			$this->view->assign('selectedDbalDriver', $this->getSelectedDbalDriver());
+			$this->view->assign('dbalDrivers', $this->getAvailableDbalDrivers());
+			$this->setDbalInputFieldsToRender();
+		} else {
+			$this->view
+				->assign('renderConnectDetailsUsername', TRUE)
+				->assign('renderConnectDetailsPassword', TRUE)
+				->assign('renderConnectDetailsHost', TRUE)
+				->assign('renderConnectDetailsPort', TRUE);
+		}
+
+		return $this->view->render();
+	}
+
+	/**
+	 * Render fields required for successful connect based on dbal driver selection.
+	 * Hint: There is a code duplication in handle() and this method. This
+	 * is done by intention to keep this code area easy to maintain and understand.
+	 *
+	 * @return void
+	 */
+	protected function setDbalInputFieldsToRender() {
+		$driver = $this->getSelectedDbalDriver();
+		switch($driver) {
+			case 'mssql':
+			case 'odbc_mssql':
+			case 'postgres':
+				$this->view
+					->assign('renderConnectDetailsUsername', TRUE)
+					->assign('renderConnectDetailsPassword', TRUE)
+					->assign('renderConnectDetailsHost', TRUE)
+					->assign('renderConnectDetailsPort', TRUE)
+					->assign('renderConnectDetailsDatabase', TRUE);
+				break;
+			case 'oci8':
+				$this->view
+					->assign('renderConnectDetailsUsername', TRUE)
+					->assign('renderConnectDetailsPassword', TRUE)
+					->assign('renderConnectDetailsHost', TRUE)
+					->assign('renderConnectDetailsPort', TRUE)
+					->assign('renderConnectDetailsDatabase', TRUE)
+					->assign('renderConnectDetailsOracleSidConnect', TRUE);
+				$type = isset($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dbal']['handlerCfg']['_DEFAULT']['config']['driverOptions']['connectSID'])
+					? $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dbal']['handlerCfg']['_DEFAULT']['config']['driverOptions']['connectSID']
+					: '';
+				if ($type === TRUE) {
+					$this->view->assign('oracleSidSelected', TRUE);
+				}
+				break;
+		}
+	}
+
+	/**
+	 * Render connect port and label
+	 *
+	 * @return integer Configured or default port
+	 */
+	protected function getConfiguredOrDefaultPort() {
+		$configuredPort = (int)$this->getConfiguredPort();
+		if (!$configuredPort) {
+			if ($this->isDbalEnabled()) {
+				$driver = $this->getSelectedDbalDriver();
+				switch ($driver) {
+					case 'postgres':
+						$port = 5432;
+						break;
+					case 'mssql':
+					case 'odbc_mssql':
+						$port = 1433;
+						break;
+					case 'oci8':
+						$port = 1521;
+						break;
+					default:
+						$port = 3306;
+				}
+			} else {
+				$port = 3306;
+			}
+		} else {
+			$port = $configuredPort;
+		}
+		return $port;
+	}
+
+	/**
+	 * Test connection with given credentials
+	 *
+	 * @return boolean TRUE if connect was successful
+	 */
+	protected function isConnectSuccessful() {
+		/** @var $databaseConnection \TYPO3\CMS\Core\Database\DatabaseConnection */
+		$databaseConnection = $this->objectManager->get('TYPO3\\CMS\\Core\\Database\\DatabaseConnection');
+
+		if ($this->isDbalEnabled()) {
+			// Set additional connect information based on dbal driver. postgres for example needs
+			// database name already for connect.
+			if (isset($GLOBALS['TYPO3_CONF_VARS']['DB']['database'])) {
+				$databaseConnection->setDatabaseName($GLOBALS['TYPO3_CONF_VARS']['DB']['database']);
+			}
+		}
+
+		$username = isset($GLOBALS['TYPO3_CONF_VARS']['DB']['username']) ? $GLOBALS['TYPO3_CONF_VARS']['DB']['username'] : '';
+		$databaseConnection->setDatabaseUsername($username);
+		$password = isset($GLOBALS['TYPO3_CONF_VARS']['DB']['password']) ? $GLOBALS['TYPO3_CONF_VARS']['DB']['password'] : '';
+		$databaseConnection->setDatabasePassword($password);
+		$databaseConnection->setDatabaseHost($this->getConfiguredHost());
+		$databaseConnection->setDatabasePort($this->getConfiguredPort());
+
+		$result = FALSE;
+		if (@$databaseConnection->sql_pconnect()) {
+			$result = TRUE;
+		}
+		return $result;
+	}
+
+	/**
+	 * Returns a list of database drivers that are available on current server.
+	 *
+	 * @return array
+	 */
+	protected function getAvailableDbalDrivers() {
+		$supportedDrivers = $this->getSupportedDbalDrivers();
+		$availableDrivers = array();
+		$selectedDbalDriver = $this->getSelectedDbalDriver();
+		foreach ($supportedDrivers as $abstractionLayer => $drivers) {
+			foreach ($drivers as $driver => $info) {
+				if (isset($info['combine']) && $info['combine'] === 'OR') {
+					$isAvailable = FALSE;
+				} else {
+					$isAvailable = TRUE;
+				}
+				// Loop through each PHP module dependency to ensure it is loaded
+				foreach ($info['extensions'] as $extension) {
+					if (isset($info['combine']) && $info['combine'] === 'OR') {
+						$isAvailable |= extension_loaded($extension);
+					} else {
+						$isAvailable &= extension_loaded($extension);
+					}
+				}
+				if ($isAvailable) {
+					if (!isset($availableDrivers[$abstractionLayer])) {
+						$availableDrivers[$abstractionLayer] = array();
+					}
+					$availableDrivers[$abstractionLayer][$driver] = array();
+					$availableDrivers[$abstractionLayer][$driver]['driver'] = $driver;
+					$availableDrivers[$abstractionLayer][$driver]['label'] = $info['label'];
+					$availableDrivers[$abstractionLayer][$driver]['selected'] = FALSE;
+					if ($selectedDbalDriver === $driver) {
+						$availableDrivers[$abstractionLayer][$driver]['selected'] = TRUE;
+					}
+				}
+			}
+		}
+		return $availableDrivers;
+	}
+
+	/**
+	 * Returns a list of DBAL supported database drivers, with a
+	 * user-friendly name and any PHP module dependency.
+	 *
+	 * @return array
+	 */
+	protected function getSupportedDbalDrivers() {
+		$supportedDrivers = array(
+			'Native' => array(
+				'mssql' => array(
+					'label' => 'Microsoft SQL Server',
+					'extensions' => array('mssql')
+				),
+				'oci8' => array(
+					'label' => 'Oracle OCI8',
+					'extensions' => array('oci8')
+				),
+				'postgres' => array(
+					'label' => 'PostgreSQL',
+					'extensions' => array('pgsql')
+				)
+			),
+			'ODBC' => array(
+				'odbc_mssql' => array(
+					'label' => 'Microsoft SQL Server',
+					'extensions' => array('odbc', 'mssql')
+				)
+			)
+		);
+		return $supportedDrivers;
+	}
+
+	/**
+	 * Get selected dbal driver if any
+	 *
+	 * @return string Dbal driver or empty string if not yet selected
+	 */
+	protected function getSelectedDbalDriver() {
+		if (isset($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dbal']['handlerCfg']['_DEFAULT']['config']['driver'])) {
+			return $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dbal']['handlerCfg']['_DEFAULT']['config']['driver'];
+		}
+		return '';
+	}
+
+	/**
+	 * Adds dbal and adodb to list of loaded extensions
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function executeLoadDbalExtension() {
+		if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('adodb')) {
+			\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::loadExtension('adodb');
+		}
+		if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('dbal')) {
+			\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::loadExtension('dbal');
+		}
+		/** @var $errorStatus \TYPO3\CMS\Install\Status\WarningStatus */
+		$warningStatus = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\WarningStatus');
+		$warningStatus->setTitle('Loaded database abstraction layer');
+		return $warningStatus;
+	}
+
+	/**
+	 * Remove dbal and adodb from list of loaded extensions
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function executeUnloadDbalExtension() {
+		if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('adodb')) {
+			\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::unloadExtension('adodb');
+		}
+		if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('dbal')) {
+			\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::unloadExtension('dbal');
+		}
+		// @TODO: Remove configuration from TYPO3_CONF_VARS['EXTCONF']['dbal']
+		/** @var $errorStatus \TYPO3\CMS\Install\Status\WarningStatus */
+		$warningStatus = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\WarningStatus');
+		$warningStatus->setTitle('Removed database abstraction layer');
+		return $warningStatus;
+	}
+
+	/**
+	 * Returns configured host with port split off if given
+	 *
+	 * @return string
+	 */
+	protected function getConfiguredHost() {
+		$host = isset($GLOBALS['TYPO3_CONF_VARS']['DB']['host']) ? $GLOBALS['TYPO3_CONF_VARS']['DB']['host'] : '';
+		$port = isset($GLOBALS['TYPO3_CONF_VARS']['DB']['port']) ? $GLOBALS['TYPO3_CONF_VARS']['DB']['port'] : '';
+		if (strlen($port) < 1 && strpos($host, ':') > 0) {
+			list($host) = explode(':', $host);
+		}
+		return $host;
+	}
+
+	/**
+	 * Returns configured port. Gets port from host value if port is not yet set.
+	 *
+	 * @return integer
+	 */
+	protected function getConfiguredPort() {
+		$host = isset($GLOBALS['TYPO3_CONF_VARS']['DB']['host']) ? $GLOBALS['TYPO3_CONF_VARS']['DB']['host'] : '';
+		$port = isset($GLOBALS['TYPO3_CONF_VARS']['DB']['port']) ? $GLOBALS['TYPO3_CONF_VARS']['DB']['port'] : '';
+		if (!strlen($port) > 0 && strpos($host, ':') > 0) {
+			$hostPortArray = explode(':', $host);
+			$port = $hostPortArray[1];
+		}
+		return (int)$port;
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/Controller/Action/Step/DatabaseData.php b/typo3/sysext/install/Classes/Controller/Action/Step/DatabaseData.php
new file mode 100644
index 000000000000..643ebe67aaf1
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Step/DatabaseData.php
@@ -0,0 +1,150 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Step;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+
+/**
+ * Populate base tables, insert admin user, set install tool password
+ */
+class DatabaseData extends Action\AbstractAction implements StepInterface {
+
+	/**
+	 * Import tables and data, create admin user, create install tool password
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function execute() {
+		$result = array();
+
+		/** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
+		$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+
+		$postValues = $this->postValues['values'];
+
+		// Check password and return early if not good enough
+		$password = $postValues['password'];
+		if (strlen($password) < 8) {
+			$errorStatus = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+			$errorStatus->setTitle('Administrator password not good enough!');
+			$errorStatus->setMessage(
+				'You are setting an important password here! It gives an attacker full control over your instance if cracked.' .
+				' It should be strong (include lower and upper case characters, special characters and numbers) and must be at least eight characters long.'
+			);
+			$result[] = $errorStatus;
+			return $result;
+		}
+
+		// Set site name
+		if (!empty($postValues['sitename'])) {
+			$configurationManager->setLocalConfigurationValueByPath('SYS/sitename', $postValues['sitename']);
+		}
+
+		$this->importDatabaseData();
+
+		// Insert admin user
+		// Password is simple md5 here for now, will be updated by saltedpasswords on first login
+		// @TODO: Handle saltedpasswords in installer and store password salted in the first place
+		$adminUserFields = array(
+			'username' => 'admin',
+			'password' => md5($password),
+			'admin' => 1,
+			'tstamp' => $GLOBALS['EXEC_TIME'],
+			'crdate' => $GLOBALS['EXEC_TIME']
+		);
+		$this->getDatabase()->exec_INSERTquery('be_users', $adminUserFields);
+
+		// Set password as install tool password
+		$configurationManager->setLocalConfigurationValueByPath('BE/installToolPassword', md5($password));
+
+		return $result;
+	}
+
+	/**
+	 * Step needs to be executed if there are no tables in database
+	 *
+	 * @return boolean
+	 */
+	public function needsExecution() {
+		$result = FALSE;
+		$existingTables = $this->getDatabase()->admin_get_tables();
+		if (count($existingTables) === 0) {
+			$result = TRUE;
+		}
+		return $result;
+	}
+
+	/**
+	 * Render this step
+	 *
+	 * @return string
+	 */
+	public function handle() {
+		$this->initialize();
+		return $this->view->render();
+	}
+
+	/**
+	 * Create tables and import static rows
+	 *
+	 * @return void
+	 */
+	protected function importDatabaseData() {
+		// Will load ext_localconf and ext_tables. This is pretty safe here since we are
+		// in first install (database empty), so it is very likely that no extension is loaded
+		// that could trigger a fatal at this point.
+		$this->loadExtLocalconfDatabaseAndExtTables();
+
+		// Import database data
+		$database = $this->getDatabase();
+		/** @var \TYPO3\CMS\Install\Service\SqlSchemaMigrationService $schemaMigrationService */
+		$schemaMigrationService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SqlSchemaMigrationService');
+		/** @var \TYPO3\CMS\Install\Service\SqlExpectedSchemaService $expectedSchemaService */
+		$expectedSchemaService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SqlExpectedSchemaService');
+
+		// Raw concatenated ext_tables.sql and friends string
+		$expectedSchemaString = $expectedSchemaService->getTablesDefinitionString(TRUE);
+		$statements = $schemaMigrationService->getStatementArray($expectedSchemaString, TRUE);
+		list($_, $insertCount) = $schemaMigrationService->getCreateTables($statements, TRUE);
+
+		$fieldDefinitionsFile = $schemaMigrationService->getFieldDefinitions_fileContent($expectedSchemaString);
+		$fieldDefinitionsDatabase = $schemaMigrationService->getFieldDefinitions_database();
+		$difference = $schemaMigrationService->getDatabaseExtra($fieldDefinitionsFile, $fieldDefinitionsDatabase);
+		$updateStatements = $schemaMigrationService->getUpdateSuggestions($difference);
+
+		$schemaMigrationService->performUpdateQueries($updateStatements['add'], $updateStatements['add']);
+		$schemaMigrationService->performUpdateQueries($updateStatements['change'], $updateStatements['change']);
+		$schemaMigrationService->performUpdateQueries($updateStatements['create_table'], $updateStatements['create_table']);
+
+		foreach ($insertCount as $table => $count) {
+			$insertStatements = $schemaMigrationService->getTableInsertStatements($statements, $table);
+			foreach ($insertStatements as $insertQuery) {
+				$insertQuery = rtrim($insertQuery, ';');
+				$database->admin_query($insertQuery);
+			}
+		}
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/Action/Step/DatabaseSelect.php b/typo3/sysext/install/Classes/Controller/Action/Step/DatabaseSelect.php
new file mode 100644
index 000000000000..da4213c45ff9
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Step/DatabaseSelect.php
@@ -0,0 +1,159 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Step;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+
+/**
+ * Database select step.
+ * This step is only rendered if database is mysql. With dbal,
+ * database name is submitted by previous step already.
+ */
+class DatabaseSelect extends Action\AbstractAction implements StepInterface {
+
+	/**
+	 * @var \TYPO3\CMS\Core\Database\DatabaseConnection
+	 */
+	protected $databaseConnection = NULL;
+
+	/**
+	 * Create database if needed, save selected db name in configuration
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function execute() {
+		$result = array();
+		$this->initializeDatabaseConnection();
+		$postValues = $this->postValues['values'];
+		$localConfigurationPathValuePairs = array();
+		if ($postValues['type'] === 'new') {
+			$newDatabaseName = $postValues['new'];
+			if (strlen($newDatabaseName) <= 50) {
+				$createDatabaseResult = $this->databaseConnection->admin_query('CREATE DATABASE ' . $newDatabaseName . ' CHARACTER SET utf8');
+				if ($createDatabaseResult) {
+					$localConfigurationPathValuePairs['DB/database'] = $newDatabaseName;
+				} else {
+					/** @var $errorStatus \TYPO3\CMS\Install\Status\ErrorStatus */
+					$errorStatus = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+					$errorStatus->setTitle('Unable to create database');
+					$errorStatus->setMessage(
+						'Database with name ' . $newDatabaseName . ' could not be created.' .
+						' Either your database name contains special chars (only alphanumeric characters are allowed)' .
+						' or your database user probably has no sufficient permissions to create it.' .
+						' Please choose an existing (empty) database or contact administration.'
+					);
+					$result[] = $errorStatus;
+				}
+			} else {
+				/** @var $errorStatus \TYPO3\CMS\Install\Status\ErrorStatus */
+				$errorStatus = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+				$errorStatus->setTitle('Database name not valid');
+				$errorStatus->setMessage('Given database name must be shorter than fifty characters.');
+				$result[] = $errorStatus;
+			}
+		} elseif ($postValues['type'] === 'existing') {
+			$localConfigurationPathValuePairs['DB/database'] = $postValues['existing'];
+		}
+
+		if (!empty($localConfigurationPathValuePairs)) {
+			/** @var $configurationManager \TYPO3\CMS\Core\Configuration\ConfigurationManager */
+			$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+			$configurationManager->setLocalConfigurationValuesByPathValuePairs($localConfigurationPathValuePairs);
+		}
+
+		return $result;
+	}
+
+	/**
+	 * Step needs to be executed if database is not set or can
+	 * not be selected.
+	 *
+	 * @return boolean
+	 */
+	public function needsExecution() {
+		$this->initializeDatabaseConnection();
+		$result = TRUE;
+		if (strlen($GLOBALS['TYPO3_CONF_VARS']['DB']['database']) > 0) {
+			$this->databaseConnection->setDatabaseName($GLOBALS['TYPO3_CONF_VARS']['DB']['database']);
+			try {
+				$selectResult = $this->databaseConnection->sql_select_db();
+				if ($selectResult === TRUE) {
+					$result = FALSE;
+				}
+			} catch (\RuntimeException $e) {
+			}
+		}
+		return $result;
+	}
+
+	/**
+	 * Render this step
+	 *
+	 * @return string
+	 */
+	public function handle() {
+		$this->initialize();
+		$this->view->assign('databaseList', $this->getDatabaseList());
+		return $this->view->render();
+	}
+
+	/**
+	 * Returns list of available databases (with access-check based on username/password)
+	 *
+	 * @return array List of available databases
+	 */
+	protected function getDatabaseList() {
+		$this->initializeDatabaseConnection();
+		$databaseArray = $this->databaseConnection->admin_get_dbs();
+		// Remove mysql organizational tables from database list
+		$reservedDatabaseNames = array('mysql', 'information_schema', 'performance_schema');
+		$allPossibleDatabases = array_diff($databaseArray, $reservedDatabaseNames);
+		$databasesWithoutTables = array();
+		foreach ($allPossibleDatabases as $database) {
+			$this->databaseConnection->setDatabaseName($database);
+			$this->databaseConnection->sql_select_db();
+			$existingTables = $this->databaseConnection->admin_get_tables();
+			if (count($existingTables) === 0) {
+				$databasesWithoutTables[] = $database;
+			}
+		}
+		return $databasesWithoutTables;
+	}
+
+	/**
+	 * Initialize database connection
+	 *
+	 * @return void
+	 */
+	protected function initializeDatabaseConnection() {
+		$this->databaseConnection = $this->objectManager->get('TYPO3\\CMS\\Core\\Database\\DatabaseConnection');
+		$this->databaseConnection->setDatabaseUsername($GLOBALS['TYPO3_CONF_VARS']['DB']['username']);
+		$this->databaseConnection->setDatabasePassword($GLOBALS['TYPO3_CONF_VARS']['DB']['password']);
+		$this->databaseConnection->setDatabaseHost($GLOBALS['TYPO3_CONF_VARS']['DB']['host']);
+		$this->databaseConnection->setDatabasePort($GLOBALS['TYPO3_CONF_VARS']['DB']['port']);
+		$this->databaseConnection->sql_pconnect();
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/Action/Step/DefaultConfiguration.php b/typo3/sysext/install/Classes/Controller/Action/Step/DefaultConfiguration.php
new file mode 100644
index 000000000000..a26bded8614e
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Step/DefaultConfiguration.php
@@ -0,0 +1,90 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Step;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+
+/**
+ * Set production defaults
+ */
+class DefaultConfiguration extends Action\AbstractAction implements StepInterface {
+
+	/**
+	 * Set defaults of auto configuration, mark installation as completed
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function execute() {
+		// @TODO: Implement "auto configuration"
+
+		/** @var $configurationManager \TYPO3\CMS\Core\Configuration\ConfigurationManager */
+		$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+		$configurationManager->setLocalConfigurationValueByPath('SYS/isInitialInstallationInProgress', FALSE);
+
+		/** @var \TYPO3\CMS\Install\Service\SessionService $session */
+		$session = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SessionService');
+		$session->destroySession();
+
+		/** @var $formProtection \TYPO3\CMS\Core\FormProtection\InstallToolFormProtection */
+		$formProtection = \TYPO3\CMS\Core\FormProtection\FormProtectionFactory::get(
+			'TYPO3\\CMS\\Core\\FormProtection\\InstallToolFormProtection'
+		);
+		$formProtection->clean();
+
+		// @TODO: This and similar code in ToolController should be moved to enable install file service
+		$enableInstallToolFile = PATH_site . 'typo3conf/ENABLE_INSTALL_TOOL';
+		if (is_file($enableInstallToolFile) && trim(file_get_contents($enableInstallToolFile)) !== 'KEEP_FILE') {
+			unlink($enableInstallToolFile);
+		}
+
+		\TYPO3\CMS\Core\Utility\HttpUtility::redirect('../../../index.php', \TYPO3\CMS\Core\Utility\HttpUtility::HTTP_STATUS_303);
+	}
+
+	/**
+	 * Step needs to be executed if 'isInitialInstallationInProgress' is set to TRUE in LocalConfiguration
+	 *
+	 * @return boolean
+	 */
+	public function needsExecution() {
+		$result = FALSE;
+		if (isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['isInitialInstallationInProgress'])
+			&& $GLOBALS['TYPO3_CONF_VARS']['SYS']['isInitialInstallationInProgress'] === TRUE
+		) {
+			$result = TRUE;
+		}
+		return $result;
+	}
+
+	/**
+	 * Render this step
+	 *
+	 * @return string
+	 */
+	public function handle() {
+		$this->initialize();
+		return $this->view->render();
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/Action/Step/EnvironmentAndFolders.php b/typo3/sysext/install/Classes/Controller/Action/Step/EnvironmentAndFolders.php
new file mode 100644
index 000000000000..9eed07c2df62
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Step/EnvironmentAndFolders.php
@@ -0,0 +1,117 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Step;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+
+/**
+ * Very first install step:
+ * - Needs execution if typo3conf/LocalConfiguration.php does not exist
+ * - Renders system environment output
+ * - Creates folders like typo3temp, see FolderStructure/DefaultFactory for details
+ * - Creates typo3conf/LocalConfiguration.php from factory
+ */
+class EnvironmentAndFolders extends Action\AbstractAction implements StepInterface {
+
+	/**
+	 * Execute environment and folder step:
+	 * - Create main folder structure
+	 * - Create typo3conf/LocalConfiguration.php
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function execute() {
+		/** @var $folderStructureFactory \TYPO3\CMS\Install\FolderStructure\DefaultFactory */
+		$folderStructureFactory = $this->objectManager->get('TYPO3\\CMS\\Install\\FolderStructure\\DefaultFactory');
+		/** @var $structureFacade \TYPO3\CMS\Install\FolderStructure\StructureFacade */
+		$structureFacade = $folderStructureFactory->getStructure();
+		$structureFixMessages = $structureFacade->fix();
+		/** @var \TYPO3\CMS\Install\Status\StatusUtility $statusUtility */
+		$statusUtility = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\StatusUtility');
+		$errorsFromStructure = $statusUtility->filterBySeverity($structureFixMessages, 'error');
+
+		// Proceed with creating LocalConfiguration.php only if folder creation did not throw errors
+		if (empty($errorsFromStructure)) {
+			/** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
+			$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+			$configurationManager->createLocalConfigurationFromFactoryConfiguration();
+
+			// Create enable install tool file after typo3conf & LocalConfiguration were created
+			$installToolService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\EnableFileService');
+			$installToolService->createInstallToolEnableFile();
+		}
+
+		return $errorsFromStructure;
+	}
+
+	/**
+	 * Step needs to be executed if LocalConfiguration file does not exist.
+	 *
+	 * @return boolean
+	 */
+	public function needsExecution() {
+		if (@is_file(PATH_typo3conf . 'LocalConfiguration.php')) {
+			return FALSE;
+		} else {
+			return TRUE;
+		}
+	}
+
+	/**
+	 * Render this step
+	 *
+	 * @return string
+	 */
+	public function handle() {
+		$this->initialize();
+
+		/** @var \TYPO3\CMS\Install\SystemEnvironment\Check $statusCheck */
+		$statusCheck = $this->objectManager->get('TYPO3\\CMS\\Install\\SystemEnvironment\\Check');
+		$statusObjects = $statusCheck->getStatus();
+		/** @var \TYPO3\CMS\Install\Status\StatusUtility $statusUtility */
+		$statusUtility = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\StatusUtility');
+		$environmentStatus = $statusUtility->sortBySeverity($statusObjects);
+		$this->view->assign('environmentStatus', $environmentStatus);
+
+		/** @var $folderStructureFactory \TYPO3\CMS\Install\FolderStructure\DefaultFactory */
+		$folderStructureFactory = $this->objectManager->get('TYPO3\\CMS\\Install\\FolderStructure\\DefaultFactory');
+		/** @var $structureFacade \TYPO3\CMS\Install\FolderStructure\StructureFacade */
+		$structureFacade = $folderStructureFactory->getStructure();
+		$structureMessages = $structureFacade->getStatus();
+		/** @var $statusUtility \TYPO3\CMS\Install\Status\StatusUtility */
+		$structureErrors = $statusUtility->filterBySeverity($structureMessages, 'error');
+		$this->view->assign('structureErrors', $structureErrors);
+
+		if (count($environmentStatus['error']) > 0
+			|| count($environmentStatus['warning']) > 0
+			|| count($structureErrors) > 0
+		) {
+			$this->view->assign('errorsOrWarningsFromStatus', TRUE);
+		}
+
+		return $this->view->render();
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/mod/index.php b/typo3/sysext/install/Classes/Controller/Action/Step/StepInterface.php
old mode 100755
new mode 100644
similarity index 54%
rename from typo3/sysext/install/mod/index.php
rename to typo3/sysext/install/Classes/Controller/Action/Step/StepInterface.php
index 5f9cf51ac2f6..370e98e375f9
--- a/typo3/sysext/install/mod/index.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Step/StepInterface.php
@@ -1,8 +1,10 @@
 <?php
+namespace TYPO3\CMS\Install\Controller\Action\Step;
+
 /***************************************************************
  *  Copyright notice
  *
- *  (c) 2011-2013 Steffen Gebert <steffen.gebert@typo3.org>
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
  *  All rights reserved
  *
  *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -21,18 +23,26 @@
  *
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
-// This checks permissions and exits if the users has no permission for entry.
-$BE_USER->modAccess($MCONF, TRUE);
-/*
- * @deprecated since 6.0, the classname tx_install_mod1 and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/Controller/InstallToolModuleController.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/Controller/InstallToolModuleController.php';
+
+use TYPO3\CMS\Install\Controller\Action;
+
 /**
- * @var $SOBE \TYPO3\CMS\Install\Controller\InstallToolModuleController
+ * Interface implemented by single steps
  */
-$SOBE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\Controller\\InstallToolModuleController');
-$SOBE->init();
-$SOBE->main();
+interface StepInterface extends Action\ActionInterface {
+
+	/**
+	 * Execute a step
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function execute();
+
+	/**
+	 * Whether this step must be executed
+	 *
+	 * @return boolean TRUE if this step needs to be executed
+	 */
+	public function needsExecution();
+}
 ?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/AllConfiguration.php b/typo3/sysext/install/Classes/Controller/Action/Tool/AllConfiguration.php
new file mode 100644
index 000000000000..fdba2baa9362
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/AllConfiguration.php
@@ -0,0 +1,193 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Tool;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Show system environment check results
+ */
+class AllConfiguration extends Action\AbstractAction implements Action\ActionInterface {
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string content
+	 */
+	public function handle() {
+		$this->initialize();
+
+		if (isset($this->postValues['set']['write'])) {
+			$this->view->assign('configurationValuesSaved', TRUE);
+			$this->view->assign('savedConfigurationValueMessages', $this->updateLocalConfigurationValues());
+		} else {
+			$this->view->assign('data', $this->setUpConfigurationData());
+		}
+
+		return $this->view->render();
+	}
+
+	/**
+	 * Set up configuration data
+	 *
+	 * @return array Configuration data
+	 */
+	protected function setUpConfigurationData() {
+		$data = array();
+		foreach ($GLOBALS['TYPO3_CONF_VARS'] as $sectionName => $sectionData) {
+			$data[$sectionName] = array();
+
+			foreach ($sectionData as $key => $value) {
+				if (isset($GLOBALS['TYPO3_CONF_VARS_extensionAdded'][$sectionName][$key])) {
+					// Don't allow editing stuff which is added by extensions
+					// Make sure we fix potentially duplicated entries from older setups
+					$potentialValue = str_replace(array('\'.chr(10).\'', '\' . LF . \''), array(LF, LF), $value);
+					while (preg_match('/' . preg_quote($GLOBALS['TYPO3_CONF_VARS_extensionAdded'][$sectionName][$key], '/') . '$/', '', $potentialValue)) {
+						$potentialValue = preg_replace('/' . preg_quote($GLOBALS['TYPO3_CONF_VARS_extensionAdded'][$sectionName][$key], '/') . '$/', '', $potentialValue);
+					}
+					$value = $potentialValue;
+				}
+
+				$commentArray = $this->getDefaultConfigArrayComments();
+				$description = trim($commentArray[$sectionName][$key]);
+				$isTextarea = preg_match('/^(<.*?>)?string \\(textarea\\)/i', $description) ? TRUE : FALSE;
+				$doNotRender = preg_match('/^(<.*?>)?string \\(exclude\\)/i', $description) ? TRUE : FALSE;
+
+				if (!is_array($value) && !$doNotRender && (!preg_match('/[' . LF . CR . ']/', $value) || $isTextarea)) {
+					$itemData = array();
+					$itemData['key'] = $key;
+					$itemData['description'] = $description;
+					if ($isTextarea) {
+						$itemData['type'] = 'textarea';
+						$itemData['value'] = str_replace(array('\'.chr(10).\'', '\' . LF . \''), array(LF, LF), $value);
+					} elseif (preg_match('/^(<.*?>)?boolean/i', $description)) {
+						$itemData['type'] = 'checkbox';
+						$itemData['value'] = $value && strcmp($value, '0') ? $value : 1;
+						$itemData['checked'] = $value ? TRUE : FALSE;
+					} else {
+						$itemData['type'] = 'input';
+						$itemData['value'] = $value;
+					}
+					$data[$sectionName][] = $itemData;
+				}
+			}
+		}
+		return $data;
+	}
+
+	/**
+	 * Store changed values in LocalConfiguration
+	 *
+	 * @return string Status messages of changed values
+	 */
+	protected function updateLocalConfigurationValues() {
+		$statusObjects = array();
+		if (isset($this->postValues['values']) && is_array($this->postValues['values'])) {
+			$configurationPathValuePairs = array();
+			$commentArray = $this->getDefaultConfigArrayComments();
+			$formValues = $this->postValues['values'];
+			foreach ($formValues as $section => $valueArray) {
+				if (is_array($GLOBALS['TYPO3_CONF_VARS'][$section])) {
+					foreach ($valueArray as $valueKey => $value) {
+						if (isset($GLOBALS['TYPO3_CONF_VARS'][$section][$valueKey])) {
+							$description = trim($commentArray[$section][$valueKey]);
+							if (preg_match('/^string \\(textarea\\)/i', $description)) {
+								// Force Unix linebreaks in textareas
+								$value = str_replace(CR, '', $value);
+								// Preserve linebreaks
+								$value = str_replace(LF, '\' . LF . \'', $value);
+							}
+							if (preg_match('/^boolean/i', $description)) {
+								// When submitting settings in the Install Tool, values that default to "FALSE" or "TRUE"
+								// in EXT:core/Configuration/DefaultConfiguration.php will be sent as "0" resp. "1".
+								// Therefore, reset the values to their boolean equivalent.
+								if ($GLOBALS['TYPO3_CONF_VARS'][$section][$valueKey] === FALSE && $value === '0') {
+									$value = FALSE;
+								} elseif ($GLOBALS['TYPO3_CONF_VARS'][$section][$valueKey] === TRUE && $value === '1') {
+									$value = TRUE;
+								}
+							}
+							// Save if value changed
+							if (strcmp($GLOBALS['TYPO3_CONF_VARS'][$section][$valueKey], $value)) {
+								$configurationPathValuePairs[$section . '/' . $valueKey] = $value;
+								/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+								$status = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+								$status->setTitle('$TYPO3_CONF_VARS[\'' . $section . '\'][\'' . $valueKey . '\']');
+								$status->setMessage('New value = ' . $value);
+								$statusObjects[] = $status;
+							}
+						}
+					}
+				}
+			}
+			if (count($statusObjects)) {
+				/** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
+				$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+				$configurationManager->setLocalConfigurationValuesByPathValuePairs($configurationPathValuePairs);
+			}
+		}
+		return $statusObjects;
+	}
+
+	/**
+	 * Make an array of the comments in the EXT:core/Configuration/DefaultConfiguration.php file
+	 *
+	 * @return array
+	 */
+	protected function getDefaultConfigArrayComments() {
+		/** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
+		$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+		$string = GeneralUtility::getUrl($configurationManager->getDefaultConfigurationFileLocation());
+
+		$commentArray = array();
+		$lines = explode(LF, $string);
+		$in = 0;
+		$mainKey = '';
+		foreach ($lines as $lc) {
+			$lc = trim($lc);
+			if ($in) {
+				if (!strcmp($lc, ');')) {
+					$in = 0;
+				} else {
+					if (preg_match('/["\']([[:alnum:]_-]*)["\'][[:space:]]*=>(.*)/i', $lc, $reg)) {
+						preg_match('/,[\\t\\s]*\\/\\/(.*)/i', $reg[2], $creg);
+						$theComment = trim($creg[1]);
+						if (substr(strtolower(trim($reg[2])), 0, 5) == 'array' && !strcmp($reg[1], strtoupper($reg[1]))) {
+							$mainKey = trim($reg[1]);
+						} elseif ($mainKey) {
+							$commentArray[$mainKey][$reg[1]] = $theComment;
+						}
+					}
+				}
+			}
+			if (!strcmp($lc, 'return array(')) {
+				$in = 1;
+			}
+		}
+		return $commentArray;
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/CleanUp.php b/typo3/sysext/install/Classes/Controller/Action/Tool/CleanUp.php
new file mode 100644
index 000000000000..5519cee57d4a
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/CleanUp.php
@@ -0,0 +1,285 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Tool;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Clean up page
+ */
+class CleanUp extends Action\AbstractAction implements Action\ActionInterface {
+
+	/**
+	 * Status messages of submitted actions
+	 *
+	 * @var array
+	 */
+	protected $actionMessages = array();
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string content
+	 */
+	public function handle() {
+		$this->initialize();
+
+		if (isset($this->postValues['set']['clearTables'])) {
+			$this->actionMessages[] = $this->clearSelectedTables();
+		}
+		if (isset($this->postValues['set']['resetBackendUserUc'])) {
+			$this->actionMessages[] = $this->resetBackendUserUc();
+		}
+
+		$this->view->assign('cleanableTables', $this->getCleanableTableList());
+
+		$typo3TempData = $this->getTypo3TempStatistics();
+		$this->view->assign('typo3TempData', $typo3TempData);
+
+		$this->view->assign('actionMessages', $this->actionMessages);
+		return $this->view->render();
+	}
+
+	/**
+	 * Get list of existing tables that could be truncated.
+	 *
+	 * @return array List of cleanable tables with name, description and number of rows
+	 */
+	protected function getCleanableTableList() {
+		$tableCandidates = array(
+			array(
+				'name' => 'be_sessions',
+				'description' => 'Backend user sessions'
+			),
+			array(
+				'name' => 'cache_imagesizes',
+				'description' => 'Cached image sizes',
+			),
+			array(
+				'name' => 'cache_md5params',
+				'description' => 'Frontend redirects',
+			),
+			array(
+				'name' => 'cache_typo3temp_log',
+				'description' => 'Image rendering lock information',
+			),
+			array(
+				'name' => 'fe_sessions',
+				'description' => 'Frontend user sessions',
+			),
+			array(
+				'name' => 'fe_session_data',
+				'description' => 'Frontend user session data',
+			),
+			array(
+				'name' => 'sys_history',
+				'description' => 'Tracking of database record changes through TYPO3 backend forms',
+			),
+			array(
+				'name' => 'sys_lockedrecords',
+				'description' => 'Record locking of backend user editing',
+			),
+			array(
+				'name' => 'sys_log',
+				'description' => 'General log table',
+			),
+			array(
+				'name' => 'sys_preview',
+				'description' => 'Workspace preview links',
+			),
+			array(
+				'name' => 'tx_extensionmanager_domain_model_extension',
+				'description' => 'List of TER extensions',
+			),
+			array(
+				'name' => 'tx_rsaauth_keys',
+				'description' => 'Login process key storage'
+			),
+		);
+		$database = $this->getDatabase();
+		$allTables = array_keys($database->admin_get_tables());
+		$tables = array();
+		foreach ($tableCandidates as $candidate) {
+			if (in_array($candidate['name'], $allTables)) {
+				$candidate['rows'] = $database->exec_SELECTcountRows('*', $candidate['name']);
+				$tables[] = $candidate;
+			}
+		}
+		return $tables;
+	}
+
+	/**
+	 * Truncate selected tables
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function clearSelectedTables() {
+		$clearedTables = array();
+		$database = $this->getDatabase();
+		foreach ($this->postValues['values'] as $tableName => $selected) {
+			if ($selected == 1) {
+				$database->exec_TRUNCATEquery($tableName);
+				$clearedTables[] = $tableName;
+			}
+		}
+		if (count($clearedTables)) {
+			/** @var \TYPO3\CMS\Install\Status\OkStatus $message */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+			$message->setTitle('Cleared tables');
+			$message->setMessage('List of cleared tables: ' . implode(', ', $clearedTables));
+		} else {
+			/** @var \TYPO3\CMS\Install\Status\OkStatus $message */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\InfoStatus');
+			$message->setTitle('No tables selected to clear');
+		}
+		return $message;
+	}
+
+	/**
+	 * Reset uc field of all be_users to empty string
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function resetBackendUserUc() {
+		$database = $this->getDatabase();
+		$database->exec_UPDATEquery('be_users', '', array('uc' => ''));
+		/** @var \TYPO3\CMS\Install\Status\OkStatus $message */
+		$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+		$message->setTitle('Reset all backend users preferences');
+		return $message;
+	}
+
+	/**
+	 * Data for the typo3temp/ deletion view
+	 *
+	 * @return array Data array
+	 */
+	protected function getTypo3TempStatistics() {
+		$data = array();
+		$pathTypo3Temp= PATH_site . 'typo3temp/';
+		$postValues = $this->postValues['values'];
+
+		$condition = '0';
+		if (isset($postValues['condition'])) {
+			$condition = $postValues['condition'];
+		}
+		$numberOfFilesToDelete = 0;
+		if (isset($postValues['numberOfFiles'])) {
+			$numberOfFilesToDelete = $postValues['numberOfFiles'];
+		}
+		$subDirectory = '';
+		if (isset($postValues['subDirectory'])) {
+			$subDirectory = $postValues['subDirectory'];
+		}
+
+		// Run through files
+		$fileCounter = 0;
+		$deleteCounter = 0;
+		$criteriaMatch = 0;
+		$timeMap = array('day' => 1, 'week' => 7, 'month' => 30);
+		$directory = @dir($pathTypo3Temp . $subDirectory);
+		if (is_object($directory)) {
+			while ($entry = $directory->read()) {
+				$absoluteFile = $pathTypo3Temp . $subDirectory . '/' . $entry;
+				if (@is_file($absoluteFile)) {
+					$ok = FALSE;
+					$fileCounter++;
+					if ($condition) {
+						if (\TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($condition)) {
+							if (filesize($absoluteFile) > $condition * 1024) {
+								$ok = TRUE;
+							}
+						} else {
+							if (fileatime($absoluteFile) < $GLOBALS['EXEC_TIME'] - intval($timeMap[$condition]) * 60 * 60 * 24) {
+								$ok = TRUE;
+							}
+						}
+					} else {
+						$ok = TRUE;
+					}
+					if ($ok) {
+						$hashPart = substr(basename($absoluteFile), -14, 10);
+						// This is a kind of check that the file being deleted has a 10 char hash in it
+						if (
+							!preg_match('/[^a-f0-9]/', $hashPart)
+							|| substr($absoluteFile, -6) === '.cache'
+							|| substr($absoluteFile, -4) === '.tbl'
+							|| substr($absoluteFile, -4) === '.css'
+							|| substr($absoluteFile, -3) === '.js'
+							|| substr($absoluteFile, -5) === '.gzip'
+							|| substr(basename($absoluteFile), 0, 8) === 'installTool'
+						) {
+							if ($numberOfFilesToDelete && $deleteCounter < $numberOfFilesToDelete) {
+								$deleteCounter++;
+								unlink($absoluteFile);
+							} else {
+								$criteriaMatch++;
+							}
+						}
+					}
+				}
+			}
+			$directory->close();
+		}
+		$data['numberOfFilesMatchingCriteria'] = $criteriaMatch;
+		$data['numberOfDeletedFiles'] = $deleteCounter;
+
+		if ($deleteCounter > 0) {
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+			$message->setTitle('Deleted ' . $deleteCounter . ' files from typo3temp/' . $subDirectory . '/');
+			$this->actionMessages[] = $message;
+		}
+
+		$data['selectedCondition'] = $condition;
+		$data['numberOfFiles'] = $numberOfFilesToDelete;
+		$data['selectedSubDirectory'] = $subDirectory;
+
+		// Set up sub directory data
+		$data['subDirectories'] = array(
+			'' => array(
+				'name' => '',
+				'filesNumber' => count(GeneralUtility::getFilesInDir($pathTypo3Temp)),
+			),
+		);
+		$directories = dir($pathTypo3Temp);
+		if (is_object($directories)) {
+			while ($entry = $directories->read()) {
+				if (is_dir($pathTypo3Temp . $entry) && $entry != '..' && $entry != '.') {
+					$data['subDirectories'][$entry]['name'] = $entry;
+					$data['subDirectories'][$entry]['filesNumber'] = count(GeneralUtility::getFilesInDir($pathTypo3Temp . $entry));
+					$data['subDirectories'][$entry]['selected'] = FALSE;
+					if ($entry === $data['selectedSubDirectory']) {
+						$data['subDirectories'][$entry]['selected'] = TRUE;
+					}
+				}
+			}
+		}
+		$data['numberOfFilesInSelectedDirectory'] = $data['subDirectories'][$data['selectedSubDirectory']]['filesNumber'];
+
+		return $data;
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/FolderStructure.php b/typo3/sysext/install/Classes/Controller/Action/Tool/FolderStructure.php
new file mode 100644
index 000000000000..ed4c00a75e21
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/FolderStructure.php
@@ -0,0 +1,65 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Tool;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+
+/**
+ * Handle folder structure
+ */
+class FolderStructure extends Action\AbstractAction implements Action\ActionInterface {
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string content
+	 */
+	public function handle() {
+		$this->initialize();
+
+		/** @var $folderStructureFactory \TYPO3\CMS\Install\FolderStructure\DefaultFactory */
+		$folderStructureFactory = $this->objectManager->get('TYPO3\\CMS\\Install\\FolderStructure\\DefaultFactory');
+		/** @var $structureFacade \TYPO3\CMS\Install\FolderStructure\StructureFacade */
+		$structureFacade = $folderStructureFactory->getStructure();
+
+		$fixedStatusObjects = array();
+		if (isset($this->postValues['set']['fix'])) {
+			$fixedStatusObjects = $structureFacade->fix();
+		}
+
+		$statusObjects = $structureFacade->getStatus();
+		/** @var $statusUtility \TYPO3\CMS\Install\Status\StatusUtility */
+		$statusUtility = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\StatusUtility');
+
+		$this->view
+			->assign('fixedStatus', $fixedStatusObjects)
+			->assign('notFixableStatus', $statusUtility->filterBySeverity($statusObjects, 'error'))
+			->assign('fixableStatus', $statusUtility->filterBySeverity($statusObjects, 'warning'))
+			->assign('okStatus', $statusUtility->filterBySeverity($statusObjects, 'ok'));
+
+		return $this->view->render();
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/ImportantActions.php b/typo3/sysext/install/Classes/Controller/Action/Tool/ImportantActions.php
new file mode 100644
index 000000000000..2f5df93e07f5
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/ImportantActions.php
@@ -0,0 +1,390 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Tool;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Handle important actions
+ */
+class ImportantActions extends Action\AbstractAction implements Action\ActionInterface {
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string content
+	 */
+	public function handle() {
+		$this->initialize();
+
+		if (isset($this->postValues['set']['changeEncryptionKey'])) {
+			$this->setNewEncryptionKeyAndLogOut();
+		}
+
+		$actionMessages = array();
+		if (isset($this->postValues['set']['changeInstallToolPassword'])) {
+			$actionMessages[] = $this->changeInstallToolPassword();
+		}
+		if (isset($this->postValues['set']['changeSiteName'])) {
+			$actionMessages[] = $this->changeSiteName();
+		}
+		if (isset($this->postValues['set']['createAdministrator'])) {
+			$actionMessages[] = $this->createAdministrator();
+		}
+
+		// Database analyzer handling
+		if (isset($this->postValues['set']['databaseAnalyzerExecute'])
+			|| isset($this->postValues['set']['databaseAnalyzerAnalyze'])
+		) {
+			$this->loadExtLocalconfDatabaseAndExtTables();
+		}
+		if (isset($this->postValues['set']['databaseAnalyzerExecute'])) {
+			$actionMessages = array_merge($actionMessages, $this->databaseAnalyzerExecute());
+		}
+		if (isset($this->postValues['set']['databaseAnalyzerAnalyze'])) {
+			$actionMessages[] = $this->databaseAnalyzerAnalyze();
+		}
+
+		$this->view->assign('actionMessages', $actionMessages);
+
+		$operatingSystem = TYPO3_OS === 'WIN' ? 'Windows' : 'Unix';
+		$cgiDetected = (PHP_SAPI == 'fpm-fcgi' || PHP_SAPI == 'cgi' || PHP_SAPI == 'isapi' || PHP_SAPI == 'cgi-fcgi')
+			? TRUE
+			: FALSE;
+
+		$this->view
+			->assign('operatingSystem', $operatingSystem)
+			->assign('cgiDetected', $cgiDetected)
+			->assign('databaseName', $GLOBALS['TYPO3_CONF_VARS']['DB']['database'])
+			->assign('databaseUsername', $GLOBALS['TYPO3_CONF_VARS']['DB']['username'])
+			->assign('databaseHost', $GLOBALS['TYPO3_CONF_VARS']['DB']['host'])
+			->assign('databasePort', $GLOBALS['TYPO3_CONF_VARS']['DB']['port'])
+			->assign('databaseNumberOfTables', count($this->getDatabase()->admin_get_tables()));
+
+		return $this->view->render();
+	}
+
+	/**
+	 * Set new password if requested
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function changeInstallToolPassword() {
+		$values = $this->postValues['values'];
+		if ($values['newInstallToolPassword'] !== $values['newInstallToolPasswordCheck']) {
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+			$message->setTitle('Install tool password not changed');
+			$message->setMessage('Given passwords do not match.');
+		} elseif (strlen($values['newInstallToolPassword']) < 8) {
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+			$message->setTitle('Install tool password not changed');
+			$message->setMessage('Given passwords must be a least eight characters long.');
+		} else {
+			/** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
+			$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+			$configurationManager->setLocalConfigurationValueByPath('BE/installToolPassword', md5($values['newInstallToolPassword']));
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+			$message->setTitle('Install tool password changed');
+		}
+		return $message;
+	}
+
+	/**
+	 * Set new site name
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function changeSiteName() {
+		$values = $this->postValues['values'];
+		if (isset($values['newSiteName']) && strlen($values['newSiteName']) > 0) {
+			/** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
+			$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+			$configurationManager->setLocalConfigurationValueByPath('SYS/sitename', $values['newSiteName']);
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+			$message->setTitle('Site name changed');
+			$this->view->assign('siteName', $values['newSiteName']);
+		} else {
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+			$message->setTitle('Site name not changed');
+			$message->setMessage('Site name must be at least one character long.');
+		}
+		return $message;
+	}
+
+	/**
+	 * Set new encryption key
+	 *
+	 * @return void
+	 */
+	protected function setNewEncryptionKeyAndLogOut() {
+		$newKey = \TYPO3\CMS\Core\Utility\GeneralUtility::getRandomHexString(96);
+		/** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
+		$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+		$configurationManager->setLocalConfigurationValueByPath('SYS/encryptionKey', $newKey);
+		/** @var $formProtection \TYPO3\CMS\Core\FormProtection\InstallToolFormProtection */
+		$formProtection = \TYPO3\CMS\Core\FormProtection\FormProtectionFactory::get(
+			'TYPO3\\CMS\\Core\\FormProtection\\InstallToolFormProtection'
+		);
+		$formProtection->clean();
+		/** @var \TYPO3\CMS\Install\Service\SessionService $session */
+		$session = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SessionService');
+		$session->destroySession();
+		\TYPO3\CMS\Core\Utility\HttpUtility::redirect('Install.php?install[context]=' . $this->getContext());
+	}
+
+	/**
+	 * Create administrator user
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function createAdministrator() {
+		$values = $this->postValues['values'];
+		$username = preg_replace('/[^\\da-z._]/i', '', trim($values['newUserUsername']));
+		$password = $values['newUserPassword'];
+		$passwordCheck = $values['newUserPasswordCheck'];
+
+		if (strlen($username) < 1) {
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+			$message->setTitle('Administrator user not created');
+			$message->setMessage('No valid username given.');
+		} elseif ($password !== $passwordCheck) {
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+			$message->setTitle('Administrator user not created');
+			$message->setMessage('Passwords do not match.');
+		} elseif (strlen($password) < 8) {
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+			$message->setTitle('Administrator user not created');
+			$message->setMessage('Password must be at least eight characters long.');
+		} else {
+			$database = $this->getDatabase();
+			$userExists = $database->exec_SELECTcountRows(
+				'uid',
+				'be_users',
+				'username=' . $database->fullQuoteStr($username, 'be_users')
+			);
+			if ($userExists) {
+				/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+				$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+				$message->setTitle('Administrator user not created');
+				$message->setMessage('A user with username ' . $username . ' exists already.');
+			} else {
+				// @TODO: Handle saltedpasswords in installer and store password salted in the first place
+				$adminUserFields = array(
+					'username' => $username,
+					'password' => md5($password),
+					'admin' => 1,
+					'tstamp' => $GLOBALS['EXEC_TIME'],
+					'crdate' => $GLOBALS['EXEC_TIME']
+				);
+				$database->exec_INSERTquery('be_users', $adminUserFields);
+				/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+				$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+				$message->setTitle('Administrator created');
+			}
+		}
+
+		return $message;
+	}
+
+	/**
+	 * Execute database migration
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	protected function databaseAnalyzerExecute() {
+		$messages = array();
+
+		// Early return in case no updade was selected
+		if (empty($this->postValues['values'])) {
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\WarningStatus');
+			$message->setTitle('No database changes selected');
+			$messages[] = $message;
+			return $message;
+		}
+
+		/** @var \TYPO3\CMS\Install\Service\SqlSchemaMigrationService $schemaMigrationService */
+		$schemaMigrationService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SqlSchemaMigrationService');
+		/** @var \TYPO3\CMS\Install\Service\SqlExpectedSchemaService $expectedSchemaService */
+		$expectedSchemaService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SqlExpectedSchemaService');
+		$expectedSchema = $expectedSchemaService->getExpectedDatabaseSchema();
+		$currentSchema = $schemaMigrationService->getFieldDefinitions_database();
+
+		$statementHashesToPerform = $this->postValues['values'];
+
+		$results = array();
+
+		// Difference from expected to current
+		$addCreateChange = $schemaMigrationService->getDatabaseExtra($expectedSchema, $currentSchema);
+		$addCreateChange = $schemaMigrationService->getUpdateSuggestions($addCreateChange);
+		$results[] = $schemaMigrationService->performUpdateQueries($addCreateChange['add'], $statementHashesToPerform);
+		$results[] = $schemaMigrationService->performUpdateQueries($addCreateChange['change'], $statementHashesToPerform);
+		$results[] = $schemaMigrationService->performUpdateQueries($addCreateChange['create_table'], $statementHashesToPerform);
+
+		// Difference from current to expected
+		$dropRename = $schemaMigrationService->getDatabaseExtra($currentSchema, $expectedSchema);
+		$dropRename = $schemaMigrationService->getUpdateSuggestions($dropRename, 'remove');
+		$results[] = $schemaMigrationService->performUpdateQueries($dropRename['change'], $statementHashesToPerform);
+		$results[] = $schemaMigrationService->performUpdateQueries($dropRename['drop'], $statementHashesToPerform);
+		$results[] = $schemaMigrationService->performUpdateQueries($dropRename['change_table'], $statementHashesToPerform);
+		$results[] = $schemaMigrationService->performUpdateQueries($dropRename['drop_table'], $statementHashesToPerform);
+
+		// Create error flash messages if any
+		foreach ($results as $resultSet) {
+			if (is_array($resultSet)) {
+				foreach ($resultSet as $errorMessage) {
+					/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+					$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+					$message->setTitle('Database update failed');
+					$message->setMessage('Error: ' . $errorMessage);
+					$messages[] = $message;
+				}
+			}
+		}
+
+		/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+		$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+		$message->setTitle('Executed database updates');
+		$messages[] = $message;
+
+		return $messages;
+	}
+
+	/**
+	 * "Compare" action of analyzer
+	 *
+	 * @TODO: The SchemaMigration API is a mess and should be refactored
+	 * @TODO: Refactoring this should aim to make EM and dbal independent from ext:install by moving SchemaMigration to ext:core
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function databaseAnalyzerAnalyze() {
+		/** @var \TYPO3\CMS\Install\Service\SqlSchemaMigrationService $schemaMigrationService */
+		$schemaMigrationService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SqlSchemaMigrationService');
+		/** @var \TYPO3\CMS\Install\Service\SqlExpectedSchemaService $expectedSchemaService */
+		$expectedSchemaService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SqlExpectedSchemaService');
+		$expectedSchema = $expectedSchemaService->getExpectedDatabaseSchema();
+
+		$currentSchema = $schemaMigrationService->getFieldDefinitions_database();
+
+		$databaseAnalyzerSuggestion = array();
+
+		// Difference from expected to current
+		$addCreateChange = $schemaMigrationService->getDatabaseExtra($expectedSchema, $currentSchema);
+		$addCreateChange = $schemaMigrationService->getUpdateSuggestions($addCreateChange);
+		if (isset($addCreateChange['create_table'])) {
+			$databaseAnalyzerSuggestion['addTable'] = array();
+			foreach ($addCreateChange['create_table'] as $hash => $statement) {
+				$databaseAnalyzerSuggestion['addTable'][$hash] = array(
+					'hash' => $hash,
+					'statement' => $statement,
+				);
+			}
+		}
+		if (isset($addCreateChange['add'])) {
+			$databaseAnalyzerSuggestion['addField'] = array();
+			foreach ($addCreateChange['add'] as $hash => $statement) {
+				$databaseAnalyzerSuggestion['addField'][$hash] = array(
+					'hash' => $hash,
+					'statement' => $statement,
+				);
+			}
+		}
+		if (isset($addCreateChange['change'])) {
+			$databaseAnalyzerSuggestion['change'] = array();
+			foreach ($addCreateChange['change'] as $hash => $statement) {
+				$databaseAnalyzerSuggestion['change'][$hash] = array(
+					'hash' => $hash,
+					'statement' => $statement,
+				);
+				if (isset($addCreateChange['change_currentValue'][$hash])) {
+					$databaseAnalyzerSuggestion['change'][$hash]['current'] = $addCreateChange['change_currentValue'][$hash];
+				}
+			}
+		}
+
+		// Difference from current to expected
+		$dropRename = $schemaMigrationService->getDatabaseExtra($currentSchema, $expectedSchema);
+		$dropRename = $schemaMigrationService->getUpdateSuggestions($dropRename, 'remove');
+		if (isset($dropRename['change_table'])) {
+			$databaseAnalyzerSuggestion['renameTableToUnused'] = array();
+			foreach ($dropRename['change_table'] as $hash => $statement) {
+				$databaseAnalyzerSuggestion['renameTableToUnused'][$hash] = array(
+					'hash' => $hash,
+					'statement' => $statement,
+				);
+				if (!empty($dropRename['tables_count'][$hash])) {
+					$databaseAnalyzerSuggestion['renameTableToUnused'][$hash]['count'] = $dropRename['tables_count'][$hash];
+				}
+			}
+		}
+		if (isset($dropRename['change'])) {
+			$databaseAnalyzerSuggestion['renameTableFieldToUnused'] = array();
+			foreach ($dropRename['change'] as $hash => $statement) {
+				$databaseAnalyzerSuggestion['renameTableFieldToUnused'][$hash] = array(
+					'hash' => $hash,
+					'statement' => $statement,
+				);
+			}
+		}
+		if (isset($dropRename['drop'])) {
+			$databaseAnalyzerSuggestion['deleteField'] = array();
+			foreach ($dropRename['drop'] as $hash => $statement) {
+				$databaseAnalyzerSuggestion['deleteField'][$hash] = array(
+					'hash' => $hash,
+					'statement' => $statement,
+				);
+			}
+		}
+		if (isset($dropRename['drop_table'])) {
+			$databaseAnalyzerSuggestion['deleteTable'] = array();
+			foreach ($dropRename['drop_table'] as $hash => $statement) {
+				$databaseAnalyzerSuggestion['deleteTable'][$hash] = array(
+					'hash' => $hash,
+					'statement' => $statement,
+				);
+				if (!empty($dropRename['tables_count'][$hash])) {
+					$databaseAnalyzerSuggestion['deleteTable'][$hash]['count'] = $dropRename['tables_count'][$hash];
+				}
+			}
+		}
+
+		$this->view->assign('databaseAnalyzerSuggestion', $databaseAnalyzerSuggestion);
+
+		/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+		$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+		$message->setTitle('Analyzed current database');
+		return $message;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/SystemEnvironment.php b/typo3/sysext/install/Classes/Controller/Action/Tool/SystemEnvironment.php
new file mode 100644
index 000000000000..6c62e7ccbc0c
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/SystemEnvironment.php
@@ -0,0 +1,54 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Tool;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+
+/**
+ * Show system environment check results
+ */
+class SystemEnvironment extends Action\AbstractAction implements Action\ActionInterface {
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string content
+	 */
+	public function handle() {
+		$this->initialize();
+
+		/** @var $statusCheck \TYPO3\CMS\Install\SystemEnvironment\Check */
+		$statusCheck = $this->objectManager->get('TYPO3\\CMS\\Install\\SystemEnvironment\\Check');
+		$statusObjects = $statusCheck->getStatus();
+
+		/** @var $statusUtility \TYPO3\CMS\Install\Status\StatusUtility */
+		$statusUtility = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\StatusUtility');
+		$sortedStatusObjects = $statusUtility->sortBySeverity($statusObjects);
+		$this->view->assign('statusObjectsBySeverity', $sortedStatusObjects);
+
+		return $this->view->render();
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/TestSetup.php b/typo3/sysext/install/Classes/Controller/Action/Tool/TestSetup.php
new file mode 100644
index 000000000000..5e155cfd28b6
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/TestSetup.php
@@ -0,0 +1,617 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Tool;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Test various system setup settings
+ */
+class TestSetup extends Action\AbstractAction implements Action\ActionInterface {
+
+	/**
+	 * @var string Absolute path to image folder
+	 */
+	protected $imageBasePath = '';
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string content
+	 */
+	public function handle() {
+		$this->initialize();
+
+		$this->imageBasePath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Resources/Public/Images/';
+
+		$actionMessages = array();
+		if (isset($this->postValues['set']['testMail'])) {
+			$actionMessages[] = $this->sendTestMail();
+		}
+
+		if (isset($this->postValues['set']['testTrueTypeFontDpi'])) {
+			$this->view->assign('trueTypeFontDpiTested', TRUE);
+			$actionMessages[] = $this->createTrueTypeFontDpiTestImage();
+		}
+
+		if (isset($this->postValues['set']['testConvertImageFormatsToJpg'])) {
+			$this->view->assign('convertImageFormatsToJpgTested', TRUE);
+			if ($this->isImageMagickEnabledAndConfigured()) {
+				$actionMessages[] = $this->convertImageFormatsToJpg();
+			} else {
+				$actionMessages[] = $this->imageMagickDisabledMessage();
+			}
+		}
+
+		if (isset($this->postValues['set']['testWriteGifAndPng'])) {
+			$this->view->assign('writeGifAndPngTested', TRUE);
+			if ($this->isImageMagickEnabledAndConfigured()) {
+				$actionMessages[] = $this->writeGifAndPng();
+			} else {
+				$actionMessages[] = $this->imageMagickDisabledMessage();
+			}
+		}
+
+		if (isset($this->postValues['set']['testScalingImages'])) {
+			$this->view->assign('scalingImagesTested', TRUE);
+			if ($this->isImageMagickEnabledAndConfigured()) {
+				$actionMessages[] = $this->scaleImages();
+			} else {
+				$actionMessages[] = $this->imageMagickDisabledMessage();
+			}
+		}
+
+		if (isset($this->postValues['set']['testCombiningImages'])) {
+			$this->view->assign('combiningImagesTested', TRUE);
+			if ($this->isImageMagickEnabledAndConfigured()) {
+				$actionMessages[] = $this->combineImages();
+			} else {
+				$actionMessages[] = $this->imageMagickDisabledMessage();
+			}
+		}
+
+		if (isset($this->postValues['set']['testGdlib'])) {
+			$this->view->assign('gdlibTested', TRUE);
+			$actionMessages[] = $this->gdlib();
+		}
+
+		$this->view->assign('actionMessages', $actionMessages);
+
+		$this->view->assign('imageConfiguration', $this->getImageConfiguration());
+
+		return $this->view->render();
+	}
+
+	/**
+	 * Send a test mail to specified email address
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function sendTestMail() {
+		if (
+			!isset($this->postValues['values']['testEmailRecipient'])
+			|| !GeneralUtility::validEmail($this->postValues['values']['testEmailRecipient'])
+		) {
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+			$message->setTitle('Mail not sent');
+			$message->setMessage('Given address is not a valid email address.');
+		} else {
+			$recipient = $this->postValues['values']['testEmailRecipient'];
+			$mailMessage = $this->objectManager->get('TYPO3\\CMS\\Core\\Mail\\MailMessage');
+			$mailMessage
+				->addTo($recipient)
+				->addFrom('typo3installtool@example.org', 'TYPO3 CMS install tool')
+				->setSubject('Test TYPO3 CMS mail delivery')
+				->setBody('<html><body>html test content</body></html>')
+				->addPart('TEST CONTENT')
+				->send();
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+			$message->setTitle('Test mail sent');
+			$message->setMessage('Recipient: ' . $recipient);
+		}
+		return $message;
+	}
+
+	/**
+	 * Create true type font test image
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function createTrueTypeFontDpiTestImage() {
+		$parseTimeStart = GeneralUtility::milliseconds();
+
+		$image = @imagecreate(200, 50);
+		imagecolorallocate($image, 255, 255, 55);
+		$textColor = imagecolorallocate($image, 233, 14, 91);
+		@imagettftext(
+			$image,
+			GeneralUtility::freetypeDpiComp(20),
+			0,
+			10,
+			20,
+			$textColor,
+			\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Resources/Private/Font/vera.ttf',
+			'Testing true type'
+		);
+		$outputFile = PATH_site . 'typo3temp/installTool-createTrueTypeFontDpiTestImage.gif';
+		imagegif($image, $outputFile);
+
+		/** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
+		$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\InfoStatus');
+		$message->setTitle('True type font DPI settings');
+		$message->setMessage(
+			'If the text "Tesing true type" does not fit into the image, set TYPO3_CONF_VARS[GFX][TTFdpi] to 96'
+		);
+
+		$testResults = array();
+		$testResults['ttf'] = array();
+		$testResults['ttf']['message'] = $message;
+		$testResults['ttf']['title'] = '';
+		$testResults['ttf']['outputFile'] = $outputFile;
+		$testResults['ttf']['referenceFile'] = $this->imageBasePath . 'TestReference/Font.gif';
+
+		$this->view->assign('testResults', $testResults);
+		return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
+	}
+
+	/**
+	 * Create jpg from various image formats using IM / GM
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function convertImageFormatsToJpg() {
+		$this->setUpDatabaseConnectionMock();
+		$imageProcessor = $this->initializeImageProcessor();
+		$parseTimeStart = GeneralUtility::milliseconds();
+
+		$inputFormatsToTest = array('jpg', 'gif', 'png', 'tif', 'bmp', 'pcx', 'tga', 'pdf', 'ai');
+
+		$testResults = array();
+		foreach ($inputFormatsToTest as $formatToTest) {
+			$result = array();
+			if (!GeneralUtility::inList($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'], $formatToTest)) {
+				/** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
+				$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\WarningStatus');
+				$message->setTitle('Skipped test');
+				$message->setMessage('Handling format ' . $formatToTest . ' must be enabled in TYPO3_CONF_VARS[\'GFX\'][\'imagefile_ext\']');
+				$result['error'] = $message;
+			} else {
+				$imageProcessor->IM_commands = array();
+				$inputFile = $this->imageBasePath . 'TestInput/Test.' . $formatToTest;
+				$imageProcessor->imageMagickConvert_forceFileNameBody = 'read-' . $formatToTest;
+				$imResult = $imageProcessor->imageMagickConvert($inputFile, 'jpg', '170', '', '', '', array(), TRUE);
+				$result['title'] = 'Read ' . $formatToTest;
+				$result['outputFile'] = $imResult[3];
+				$result['referenceFile'] = $this->imageBasePath . 'TestReference/Read-' . $formatToTest . '.jpg';
+				$result['command'] = $imageProcessor->IM_commands;
+			}
+			$testResults[] = $result;
+		}
+
+		$this->view->assign('testResults', $testResults);
+		return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
+	}
+
+	/**
+	 * Write gif and png test
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function writeGifAndPng() {
+		$this->setUpDatabaseConnectionMock();
+		$imageProcessor = $this->initializeImageProcessor();
+		$parseTimeStart = GeneralUtility::milliseconds();
+
+		$testResults = array(
+			'gif' => array(),
+			'png' => array(),
+		);
+
+		// Gif
+		$inputFile = $this->imageBasePath . 'TestInput/Test.gif';
+		$imageProcessor->imageMagickConvert_forceFileNameBody = 'write-gif';
+		$imResult = $imageProcessor->imageMagickConvert($inputFile, 'gif', '', '', '', '', array(), TRUE);
+		if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gif_compress']) {
+			clearstatcache();
+			$previousSize = GeneralUtility::formatSize(filesize($imResult[3]));
+			$methodUsed = GeneralUtility::gif_compress($imResult[3], '');
+			clearstatcache();
+			$compressedSize = GeneralUtility::formatSize(filesize($imResult[3]));
+			/** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\InfoStatus');
+			$message->setTitle('Compressed gif');
+			$message->setMessage(
+				'Method used by compress: ' . $methodUsed . '<br />'
+				. ' Previous filesize: ' . $previousSize . '. Current filesize:' . $compressedSize
+			);
+		} else {
+			/** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\InfoStatus');
+			$message->setTitle('Gif compression not enabled by [GFX][gif_compress]');
+		}
+		$testResults['gif']['message'] = $message;
+		$testResults['gif']['title'] = 'Write gif';
+		$testResults['gif']['outputFile'] = $imResult[3];
+		$testResults['gif']['referenceFile'] = $this->imageBasePath . 'TestReference/Write-gif.gif';
+		$testResults['gif']['command'] = $imageProcessor->IM_commands;
+
+		// Png
+		$inputFile = $this->imageBasePath . 'TestInput/Test.png';
+		$imageProcessor->IM_commands = array();
+		$imageProcessor->imageMagickConvert_forceFileNameBody = 'write-png';
+		$imResult = $imageProcessor->imageMagickConvert($inputFile, 'png', '', '', '', '', array(), TRUE);
+		$testResults['png']['title'] = 'Write png';
+		$testResults['png']['outputFile'] = $imResult[3];
+		$testResults['png']['referenceFile'] = $this->imageBasePath . 'TestReference/Write-png.png';
+		$testResults['png']['command'] = $imageProcessor->IM_commands;
+
+		$this->view->assign('testResults', $testResults);
+		return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
+	}
+
+	/**
+	 * Write gif and png test
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function scaleImages() {
+		$this->setUpDatabaseConnectionMock();
+		$imageProcessor = $this->initializeImageProcessor();
+		$parseTimeStart = GeneralUtility::milliseconds();
+
+		$testResults = array(
+			'gif-to-gif' => array(),
+			'png-to-png' => array(),
+			'gif-to-jpg' => array(),
+		);
+
+		$imageProcessor->IM_commands = array();
+		$inputFile = $this->imageBasePath . 'TestInput/Transparent.gif';
+		$imageProcessor->imageMagickConvert_forceFileNameBody = 'scale-gif';
+		$imResult = $imageProcessor->imageMagickConvert($inputFile, 'gif', '150', '', '', '', array(), TRUE);
+		$testResults['gif-to-gif']['title'] = 'gif to gif';
+		$testResults['gif-to-gif']['outputFile'] = $imResult[3];
+		$testResults['gif-to-gif']['referenceFile'] = $this->imageBasePath . 'TestReference/Scale-gif.gif';
+		$testResults['gif-to-gif']['command'] = $imageProcessor->IM_commands;
+
+		$imageProcessor->IM_commands = array();
+		$inputFile = $this->imageBasePath . 'TestInput/Transparent.png';
+		$imageProcessor->imageMagickConvert_forceFileNameBody = 'scale-png';
+		$imResult = $imageProcessor->imageMagickConvert($inputFile, 'png', '150', '', '', '', array(), TRUE);
+		$testResults['png-to-png']['title'] = 'png to png';
+		$testResults['png-to-png']['outputFile'] = $imResult[3];
+		$testResults['png-to-png']['referenceFile'] = $this->imageBasePath . 'TestReference/Scale-png.png';
+		$testResults['png-to-png']['command'] = $imageProcessor->IM_commands;
+
+		$imageProcessor->IM_commands = array();
+		$inputFile = $this->imageBasePath . 'TestInput/Transparent.gif';
+		$imageProcessor->imageMagickConvert_forceFileNameBody = 'scale-jpg';
+		$imResult = $imageProcessor->imageMagickConvert($inputFile, 'jpg', '150', '', '', '', array(), TRUE);
+		$testResults['gif-to-jpg']['title'] = 'gif to jpg';
+		$testResults['gif-to-jpg']['outputFile'] = $imResult[3];
+		$testResults['gif-to-jpg']['referenceFile'] = $this->imageBasePath . 'TestReference/Scale-jpg.jpg';
+		$testResults['gif-to-jpg']['command'] = $imageProcessor->IM_commands;
+
+		$this->view->assign('testResults', $testResults);
+		return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
+	}
+
+	/**
+	 * Combine multiple images into one test
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function combineImages() {
+		$this->setUpDatabaseConnectionMock();
+		$imageProcessor = $this->initializeImageProcessor();
+		$parseTimeStart = GeneralUtility::milliseconds();
+
+		$testResults = array(
+			'combine1' => array(),
+			'combine2' => array(),
+		);
+
+		$inputFile = $this->imageBasePath . 'TestInput/BackgroundGreen.gif';
+		$overlayFile = $this->imageBasePath . 'TestInput/Test.jpg';
+		$maskFile = $this->imageBasePath . 'TestInput/MaskBlackWhite.gif';
+		$resultFile = $imageProcessor->tempPath . $imageProcessor->filenamePrefix
+			. GeneralUtility::shortMD5(($imageProcessor->alternativeOutputKey . 'combine1')) . '.jpg';
+		$imageProcessor->combineExec($inputFile, $overlayFile, $maskFile, $resultFile, TRUE);
+		$result = $imageProcessor->getImageDimensions($resultFile);
+		$testResults['combine1']['title'] = 'Combine using a GIF mask with only black and white';
+		$testResults['combine1']['outputFile'] = $result[3];
+		$testResults['combine1']['referenceFile'] = $this->imageBasePath . 'TestReference/Combine-1.jpg';
+		$testResults['combine1']['command'] = $imageProcessor->IM_commands;
+
+		$imageProcessor->IM_commands = array();
+		$inputFile = $this->imageBasePath . 'TestInput/BackgroundCombine.jpg';
+		$overlayFile = $this->imageBasePath . 'TestInput/Test.jpg';
+		$maskFile = $this->imageBasePath . 'TestInput/MaskCombine.jpg';
+		$resultFile = $imageProcessor->tempPath . $imageProcessor->filenamePrefix
+			. GeneralUtility::shortMD5(($imageProcessor->alternativeOutputKey . 'combine2')) . '.jpg';
+		$imageProcessor->combineExec($inputFile, $overlayFile, $maskFile, $resultFile, TRUE);
+		$result = $imageProcessor->getImageDimensions($resultFile);
+		$testResults['combine2']['title'] = 'Combine using a JPG mask with graylevels';
+		$testResults['combine2']['outputFile'] = $result[3];
+		$testResults['combine2']['referenceFile'] = $this->imageBasePath . 'TestReference/Combine-2.jpg';
+		$testResults['combine2']['command'] = $imageProcessor->IM_commands;
+
+		$this->view->assign('testResults', $testResults);
+		return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
+	}
+
+	/**
+	 * Test gdlib functions
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function gdlib() {
+		$this->setUpDatabaseConnectionMock();
+		$imageProcessor = $this->initializeImageProcessor();
+		$parseTimeStart = GeneralUtility::milliseconds();
+		$gifOrPng = $imageProcessor->gifExtension;
+		$testResults = array();
+
+		// GD with simple box
+		$imageProcessor->IM_commands = array();
+		$image = imagecreatetruecolor(170, 136);
+		$backgroundColor = imagecolorallocate($image, 0, 0, 0);
+		imagefilledrectangle($image, 0, 0, 170, 136, $backgroundColor);
+		$workArea = array(0, 0, 170, 136);
+		$conf = array(
+			'dimensions' => '10,50,150,36',
+			'color' => 'olive',
+		);
+		$imageProcessor->makeBox($image, $conf, $workArea);
+		$outputFile = $imageProcessor->tempPath . $imageProcessor->filenamePrefix
+			. GeneralUtility::shortMD5('gdSimple') . '.' . $gifOrPng;
+		$imageProcessor->ImageWrite($image, $outputFile);
+		$result = $imageProcessor->getImageDimensions($outputFile);
+		$testResults['simple'] = array();
+		$testResults['simple']['title'] = 'Create simple image';
+		$testResults['simple']['outputFile'] = $result[3];
+		$testResults['simple']['referenceFile'] = $this->imageBasePath . 'TestReference/Gdlib-simple.' . $gifOrPng;
+
+		// GD from image with box
+		$imageProcessor->IM_commands = array();
+		$inputFile = $this->imageBasePath . 'TestInput/Test.' . $gifOrPng;
+		$image = $imageProcessor->imageCreateFromFile($inputFile);
+		$workArea = array(0, 0, 170, 136);
+		$conf = array(
+			'dimensions' => '10,50,150,36',
+			'color' => 'olive',
+		);
+		$imageProcessor->makeBox($image, $conf, $workArea);
+		$outputFile = $imageProcessor->tempPath . $imageProcessor->filenamePrefix
+			. GeneralUtility::shortMD5('gdBox') . '.' . $gifOrPng;
+		$imageProcessor->ImageWrite($image, $outputFile);
+		$result = $imageProcessor->getImageDimensions($outputFile);
+		$testResults['box'] = array();
+		$testResults['box']['title'] = 'Create image from file';
+		$testResults['box']['outputFile'] = $result[3];
+		$testResults['box']['referenceFile'] = $this->imageBasePath . 'TestReference/Gdlib-box.' . $gifOrPng;
+
+		// GD with text
+		$imageProcessor->IM_commands = array();
+		$image = imagecreatetruecolor(170, 136);
+		$backgroundColor = imagecolorallocate($image, 128, 128, 150);
+		imagefilledrectangle($image, 0, 0, 170, 136, $backgroundColor);
+		$workArea = array(0, 0, 170, 136);
+		$conf = array(
+			'iterations' => 1,
+			'angle' => 0,
+			'antiAlias' => 1,
+			'text' => 'HELLO WORLD',
+			'fontColor' => '#003366',
+			'fontSize' => 18,
+			'fontFile' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Resources/Private/Font/vera.ttf',
+			'offset' => '17,40',
+		);
+		$conf['BBOX'] = $imageProcessor->calcBBox($conf);
+		$imageProcessor->makeText($image, $conf, $workArea);
+		$outputFile = $imageProcessor->tempPath . $imageProcessor->filenamePrefix .
+			GeneralUtility::shortMD5('gdText') . '.' . $gifOrPng;
+		$imageProcessor->ImageWrite($image, $outputFile);
+		$result = $imageProcessor->getImageDimensions($outputFile);
+		$testResults['text'] = array();
+		$testResults['text']['title'] = 'Render text with TrueType font';
+		$testResults['text']['outputFile'] = $result[3];
+		$testResults['text']['referenceFile'] = $this->imageBasePath . 'TestReference/Gdlib-text.' . $gifOrPng;
+
+		// GD with text, niceText
+		$testResults['niceText'] = array();
+		if ($this->isImageMagickEnabledAndConfigured()) {
+			// Warning: Re-uses $conf from above!
+			$conf['offset'] = '17,65';
+			$conf['niceText'] = 1;
+			$imageProcessor->makeText($image, $conf, $workArea);
+			$outputFile = $imageProcessor->tempPath . $imageProcessor->filenamePrefix .
+				GeneralUtility::shortMD5('gdNiceText') . '.' . $gifOrPng;
+			$imageProcessor->ImageWrite($image, $outputFile);
+			$result = $imageProcessor->getImageDimensions($outputFile);
+			$testResults['niceText']['title'] = 'Render text with TrueType font using \'niceText\' option';
+			$testResults['niceText']['outputFile'] = $result[3];
+			$testResults['niceText']['referenceFile'] = $this->imageBasePath . 'TestReference/Gdlib-niceText.' . $gifOrPng;
+			$testResults['niceText']['commands'] = $imageProcessor->IM_commands;
+			/** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\InfoStatus');
+			$message->setTitle('Note on \'niceText\'');
+			$message->setMessage(
+				'\'niceText\' is a concept that tries to improve the antialiasing of the rendered type by'
+				. ' actually rendering the textstring in double size on a black/white mask, downscaling the mask'
+				. ' and masking the text onto the image through this mask. This involves'
+				. ' ImageMagick \'combine\'/\'composite\' and \'convert\'.'
+				. ' <br />If the image has another background color than the image above (eg. dark background'
+				. ' color with light text) then you will have to set TYPO3_CONF_VARS[GFX][im_imvMaskState]=1'
+			);
+			$testResults['niceText']['message'] = $message;
+		} else {
+			$result['niceText']['error'] = $this->imageMagickDisabledMessage();
+		}
+
+		// GD with text, niceText, shadow
+		$testResults['shadow'] = array();
+		if ($this->isImageMagickEnabledAndConfigured()) {
+			// Warning: Re-uses $conf from above!
+			$conf['offset'] = '17,90';
+			$conf['niceText'] = 1;
+			$conf['shadow.'] = array(
+				'offset' => '2,2',
+				'blur' => $imageProcessor->V5_EFFECTS ? '20' : '90',
+				'opacity' => '50',
+				'color' => 'black'
+			);
+			// Warning: Re-uses $image from above!
+			$imageProcessor->makeShadow($image, $conf['shadow.'], $workArea, $conf);
+			$imageProcessor->makeText($image, $conf, $workArea);
+			$outputFile = $imageProcessor->tempPath . $imageProcessor->filenamePrefix . GeneralUtility::shortMD5('GDwithText-niceText-shadow') . '.' . $gifOrPng;
+			$imageProcessor->ImageWrite($image, $outputFile);
+			$result = $imageProcessor->getImageDimensions($outputFile);
+			$testResults['shadow']['title'] = 'Render \'niceText\' with a shadow under';
+			$testResults['shadow']['outputFile'] = $result[3];
+			$testResults['shadow']['referenceFile'] = $this->imageBasePath . 'TestReference/Gdlib-shadow.' . $gifOrPng;
+			$testResults['shadow']['commands'] = $imageProcessor->IM_commands;
+			/** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\InfoStatus');
+			$message->setTitle('Note on \'shadow\'');
+			$message->setMessage(
+				'This test makes sense only if the above test had a correct output. But if so, you may not see'
+				. ' a soft dropshadow from the third text string as you should. In that case you are most likely'
+				. ' using ImageMagick 5 and should set the flag TYPO3_CONF_VARS[GFX][im_v5effects].'
+			);
+			$testResults['shadow']['message'] = $message;
+		} else {
+			$result['shadow']['error'] = $this->imageMagickDisabledMessage();
+		}
+
+		$this->view->assign('testResults', $testResults);
+		return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
+	}
+
+	/**
+	 * Create a 'image test was done' message
+	 *
+	 * @param integer $parseTime Parse time
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function imageTestDoneMessage($parseTime = 0) {
+		/** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
+		$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+		$message->setTitle('Executed image tests');
+		$message->setMessage('Parse time: ' . $parseTime . ' ms');
+		return $message;
+	}
+
+	/**
+	 * Create a 'imageMagick disabled' message
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function imageMagickDisabledMessage() {
+		/** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
+		$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+		$message->setTitle('Tests not executed');
+		$message->setMessage('ImageMagick / GraphicsMagick handling is disabled or not configured.');
+		return $message;
+	}
+
+	/**
+	 * Gather image configuration overview
+	 *
+	 * @return array Result array
+	 */
+	protected function getImageConfiguration() {
+		$result = array();
+		$result['imageMagickOrGraphicsMagick'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] === 'gm' ? 'gm' : 'im';
+		$result['imageMagickEnabled'] =  $GLOBALS['TYPO3_CONF_VARS']['GFX']['im'];
+		$result['imageMagickPath'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path'];
+		$result['imageMagickVersion'] = $this->determineImageMagickVersion();
+		$result['imageMagick5Effecs'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_v5effects'];
+		$result['imageMagickMaskInvert'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_imvMaskState'];
+		$result['gdlibEnabled'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib'];
+		$result['gdlibPng'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png'];
+		$result['freeTypeDpi'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['TTFdpi'];
+		$result['fileFormats'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'];
+		return $result;
+	}
+
+	/**
+	 * Initialize image processor
+	 *
+	 * @return \TYPO3\CMS\Core\Imaging\GraphicalFunctions Initialized image processor
+	 */
+	protected function initializeImageProcessor() {
+		/** @var \TYPO3\CMS\Core\Imaging\GraphicalFunctions $imageProcessor */
+		$imageProcessor = $this->objectManager->get('TYPO3\\CMS\\Core\\Imaging\\GraphicalFunctions');
+		$imageProcessor->init();
+		$imageProcessor->tempPath = PATH_site . 'typo3temp/';
+		$imageProcessor->dontCheckForExistingTempFile = 1;
+		$imageProcessor->enable_typo3temp_db_tracking = 0;
+		$imageProcessor->filenamePrefix = 'installTool-';
+		$imageProcessor->dontCompress = 1;
+		$imageProcessor->alternativeOutputKey = 'typo3InstallTest';
+		$imageProcessor->noFramePrepended = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_noFramePrepended'];
+		return $imageProcessor;
+	}
+
+	/**
+	 * Find out if ImageMagick or GraphicsMagick is enabled and set up
+	 *
+	 * @return boolean TRUE if enabled and path is set
+	 */
+	protected function isImageMagickEnabledAndConfigured() {
+		$enabled = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im'];
+		$path = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path'];
+		return $enabled && $path;
+	}
+
+	/**
+	 * Determine ImageMagick / GraphicsMagick version
+	 *
+	 * @return string Version
+	 */
+	protected function determineImageMagickVersion() {
+		$command = \TYPO3\CMS\Core\Utility\CommandUtility::imageMagickCommand('identify', '-version');
+		\TYPO3\CMS\Core\Utility\CommandUtility::exec($command, $result);
+		$string = $result[0];
+		list(, $version) = explode('Magick', $string);
+		list($version) = explode(' ', trim($version));
+		return trim($version);
+	}
+
+	/**
+	 * Instantiate a dummy instance for $GLOBALS['TYPO3_DB'] to
+	 * prevent real database calls
+	 *
+	 * @return void
+	 */
+	protected function setUpDatabaseConnectionMock() {
+		$database = $this->objectManager->get('TYPO3\\CMS\\Install\\Database\\DatabaseConnectionMock');
+		$GLOBALS['TYPO3_DB'] = $database;
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/UpdateWizard.php b/typo3/sysext/install/Classes/Controller/Action/Tool/UpdateWizard.php
new file mode 100644
index 000000000000..22aeb4ebd192
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/UpdateWizard.php
@@ -0,0 +1,297 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Tool;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Handle update wizards
+ */
+class UpdateWizard extends Action\AbstractAction implements Action\ActionInterface {
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string content
+	 */
+	public function handle() {
+		$this->initialize();
+
+		// ext_localconf, db and ext_tables must be loaded for the upgrade wizards
+		$this->loadExtLocalconfDatabaseAndExtTables();
+
+		// Perform silent cache framework table upgrades
+		$this->silentCacheFrameworkTableSchemaMigration();
+
+		$actionMessages = array();
+
+		if (isset($this->postValues['set']['getUserInput'])) {
+			$actionMessages[] = $this->getUserInputForUpdateWizard();
+			$this->view->assign('updateAction', 'getUserInput');
+		} elseif (isset($this->postValues['set']['performUpdate'])) {
+			$actionMessages[] = $this->performUpdate();
+			$this->view->assign('updateAction', 'performUpdate');
+		} else {
+			$actionMessages[] = $this->listUpdates();
+			$this->view->assign('updateAction', 'listUpdates');
+		}
+
+		$this->view->assign('actionMessages', $actionMessages);
+
+		return $this->view->render();
+	}
+
+	/**
+	 * List of available updates
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function listUpdates() {
+		if (empty($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'])) {
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\WarningStatus');
+			$message->setTitle('No update wizards registered');
+			return $message;
+		}
+
+		$availableUpdates = array();
+		foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] as $identifier => $className) {
+			$updateObject = $this->getUpgradeObjectInstance($className, $identifier);
+			if ($updateObject->shouldRenderWizard()) {
+				// $explanation is changed by reference in upgrade objects!
+				$explanation = '';
+				$updateObject->checkForUpdate($explanation);
+				$availableUpdates[$identifier] = array(
+					'identifier' => $identifier,
+					'title' => $updateObject->getTitle(),
+					'explanation' => $explanation,
+					'renderNext' => FALSE,
+				);
+				// There are upgrade wizards that only show text and don't want to be executed
+				if ($updateObject->shouldRenderNextButton()) {
+					$availableUpdates[$identifier]['renderNext'] = TRUE;
+				}
+			}
+		}
+
+		$this->view->assign('availableUpdates', $availableUpdates);
+
+		/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+		$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+		$message->setTitle('Show available update wizards');
+		return $message;
+	}
+
+	/**
+	 * Get user input of update wizard
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function getUserInputForUpdateWizard() {
+		$wizardIdentifier = $this->postValues['values']['identifier'];
+
+		$className = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$wizardIdentifier];
+		$updateObject = $this->getUpgradeObjectInstance($className, $wizardIdentifier);
+		$wizardHtml = '';
+		if (method_exists($updateObject, 'getUserInput')) {
+			$wizardHtml = $updateObject->getUserInput('install[values][wizardData]');
+		}
+
+		$updateWizardData = array(
+			'identifier' => $wizardIdentifier,
+			'title' => $updateObject->getTitle(),
+			'wizardHtml' => $wizardHtml,
+		);
+
+		$this->view->assign('updateWizardData', $updateWizardData);
+
+		/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+		$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+		$message->setTitle('Show wizard options');
+		return $message;
+	}
+
+	/**
+	 * Perform update of a specific wizard
+	 *
+	 * @throws \TYPO3\CMS\Install\Exception
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function performUpdate() {
+		$this->getDatabase()->store_lastBuiltQuery = TRUE;
+
+		$wizardIdentifier = $this->postValues['values']['identifier'];
+		$className = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$wizardIdentifier];
+		$updateObject = $this->getUpgradeObjectInstance($className, $wizardIdentifier);
+
+		$wizardData = array(
+			'identifier' => $wizardIdentifier,
+			'title' => $updateObject->getTitle(),
+		);
+
+		// $wizardInputErrorMessage is given as reference to wizard object!
+		$wizardInputErrorMessage = '';
+		if (method_exists($updateObject, 'checkUserInput') && !$updateObject->checkUserInput($wizardInputErrorMessage)) {
+			/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+			$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+			$message->setTitle('Input parameter broken');
+			$message->setMessage($wizardInputErrorMessage ?: 'Something went wrong!');
+			$wizardData['wizardInputBroken'] = TRUE;
+		} else {
+			if (!method_exists($updateObject, 'performUpdate')) {
+				throw new \TYPO3\CMS\Install\Exception(
+					'No performUpdate method in update wizard with identifier ' . $wizardIdentifier,
+					1371035200
+				);
+			} else {
+				// Both variables are used by reference in performUpdate()
+				$customOutput = '';
+				$databaseQueries = array();
+				$performResult = $updateObject->performUpdate($databaseQueries, $customOutput);
+
+				if ($performResult) {
+					/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+					$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\OkStatus');
+					$message->setTitle('Update successful');
+				} else {
+					/** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
+					$message = $this->objectManager->get('TYPO3\\CMS\\Install\\Status\\ErrorStatus');
+					$message->setTitle('Update failed!');
+					if ($customOutput) {
+						$message->setMessage($customOutput);
+					}
+				}
+
+				if ($this->postValues['values']['showDatabaseQueries'] == 1) {
+					$wizardData['queries'] = $databaseQueries;
+				}
+			}
+		}
+
+		$this->view->assign('wizardData', $wizardData);
+
+		$this->getDatabase()->store_lastBuiltQuery = FALSE;
+
+		// Next update wizard, if available
+		$nextUpdateWizard = $this->getNextUpdateWizardInstance($updateObject);
+		$nextUpdateWizardIdentifier = '';
+		if ($nextUpdateWizard) {
+			$nextUpdateWizardIdentifier = $nextUpdateWizard->getIdentifier();
+		}
+		$this->view->assign('nextUpdateWizardIdentifier', $nextUpdateWizardIdentifier);
+
+		return $message;
+	}
+
+	/**
+	 * Creates instance of an upgrade object, setting the pObj, versionNumber and pObj
+	 *
+	 * @param string $className The class name
+	 * @param string $identifier The identifier of upgrade object - needed to fetch user input
+	 * @return object Newly instantiated upgrade object
+	 */
+	protected function getUpgradeObjectInstance($className, $identifier) {
+		$formValues = $this->postValues;
+		$updateObject = GeneralUtility::getUserObj($className);
+		$updateObject->setIdentifier($identifier);
+		$updateObject->versionNumber = \TYPO3\CMS\Core\Utility\VersionNumberUtility::convertVersionNumberToInteger(TYPO3_version);
+		$updateObject->pObj = $this;
+		$updateObject->userInput = $formValues['update'][$identifier];
+		return $updateObject;
+	}
+
+	/**
+	 * Returns the next upgrade wizard object
+	 * Used to show the link/button to the next upgrade wizard
+	 *
+	 * @param object $currentObj Current update wizard object
+	 * @return mixed Upgrade wizard instance or FALSE
+	 */
+	protected function getNextUpdateWizardInstance($currentObj) {
+		$isPreviousRecord = TRUE;
+		foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] as $identifier => $className) {
+			// Find the current update wizard, and then start validating the next ones
+			if ($currentObj->getIdentifier() == $identifier) {
+				$isPreviousRecord = FALSE;
+				continue;
+			}
+			if (!$isPreviousRecord) {
+				$nextUpdateWizard = $this->getUpgradeObjectInstance($className, $identifier);
+				if ($nextUpdateWizard->shouldRenderWizard()) {
+					return $nextUpdateWizard;
+				}
+			}
+		}
+		return FALSE;
+	}
+
+	/**
+	 * Force creation / update of caching framework tables that are needed by some update wizards
+	 *
+	 * @TODO: See also the other remarks on this topic in the abstract class, this whole area needs improvements
+	 * @return void
+	 */
+	protected function silentCacheFrameworkTableSchemaMigration() {
+		/** @var $sqlHandler \TYPO3\CMS\Install\Service\SqlSchemaMigrationService */
+		$sqlHandler = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SqlSchemaMigrationService');
+
+		/** @var \TYPO3\CMS\Install\Service\SqlExpectedSchemaService $expectedSchemaService */
+		$expectedSchemaService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SqlExpectedSchemaService');
+		$expectedCachingFrameworkSchema = $expectedSchemaService->getExpectedDatabaseSchema();
+
+		// Forces creation / update of caching framework tables that are needed by some update wizards
+		$cacheTablesConfiguration = implode(
+			LF,
+			$sqlHandler->getStatementArray($expectedCachingFrameworkSchema, 1, '^CREATE TABLE ')
+		);
+		$neededTableDefinition = $sqlHandler->getFieldDefinitions_fileContent($cacheTablesConfiguration);
+		$currentTableDefinition = $sqlHandler->getFieldDefinitions_database();
+		$updateTableDefinition = $sqlHandler->getDatabaseExtra($neededTableDefinition, $currentTableDefinition);
+		$updateStatements = $sqlHandler->getUpdateSuggestions($updateTableDefinition);
+		if (isset($updateStatements['create_table']) && count($updateStatements['create_table']) > 0) {
+			$sqlHandler->performUpdateQueries($updateStatements['create_table'], $updateStatements['create_table']);
+		}
+		if (isset($updateStatements['add']) && count($updateStatements['add']) > 0) {
+			$sqlHandler->performUpdateQueries($updateStatements['add'], $updateStatements['add']);
+		}
+		if (isset($updateStatements['change']) && count($updateStatements['change']) > 0) {
+			$sqlHandler->performUpdateQueries($updateStatements['change'], $updateStatements['change']);
+		}
+	}
+
+	/**
+	 * Overwrite getDatabase method of abstract!
+	 *
+	 * Returns $GLOBALS['TYPO3_DB'] directly, since this global is instantiated properly in update wizards
+	 *
+	 * @return \TYPO3\CMS\Core\Database\DatabaseConnection
+	 */
+	protected function getDatabase() {
+		return $GLOBALS['TYPO3_DB'];
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/Welcome.php b/typo3/sysext/install/Classes/Controller/Action/Tool/Welcome.php
new file mode 100644
index 000000000000..9df0d52a8bf2
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/Welcome.php
@@ -0,0 +1,44 @@
+<?php
+namespace TYPO3\CMS\Install\Controller\Action\Tool;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Controller\Action;
+
+/**
+ * Welcome page
+ */
+class Welcome extends Action\AbstractAction implements Action\ActionInterface {
+
+	/**
+	 * Handle this action
+	 *
+	 * @return string content
+	 */
+	public function handle() {
+		$this->initialize();
+		return $this->view->render();
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/Controller/BackendModuleController.php b/typo3/sysext/install/Classes/Controller/BackendModuleController.php
new file mode 100644
index 000000000000..b24f8e18295f
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/BackendModuleController.php
@@ -0,0 +1,89 @@
+<?php
+namespace TYPO3\CMS\Install\Controller;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Backend module controller
+ *
+ * Embeds in backend an only shows the 'enable install tool button' or redirects
+ * to step installer if install tool is enabled.
+ *
+ * This is a classic extbase module that does not interfere with the other code
+ * within the install tool.
+ */
+class BackendModuleController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
+
+	/**
+	 * Index action shows install tool / step installer or redirect to action to enable install tool
+	 *
+	 * @return void
+	 */
+	public function indexAction() {
+		/** @var $enableFileService \TYPO3\CMS\Install\Service\EnableFileService */
+		$enableFileService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\EnableFileService');
+		if ($enableFileService->checkInstallToolEnableFile()) {
+			// Install Tool is already enabled
+			$enableFileService->extendInstallToolEnableFileLifetime();
+			\TYPO3\CMS\Core\Utility\HttpUtility::redirect('sysext/install/Start/Install.php?install[context]=backend');
+		} else {
+			$this->redirect('showEnableInstallToolButton');
+		}
+	}
+
+	/**
+	 * Show enable install tool
+	 *
+	 * @return void
+	 */
+	public function showEnableInstallToolButtonAction() {
+		$formProtection = \TYPO3\CMS\Core\FormProtection\FormProtectionFactory::get();
+		$token = $formProtection->generateToken('installTool');
+		$this->view->assign('installToolEnableToken', $token);
+	}
+
+	/**
+	 * Enable the install tool
+	 *
+	 * @throws \RuntimeException
+	 */
+	public function enableInstallToolAction() {
+		$token = $GLOBALS['_POST']['tx_install_tools_installinstall']['installToolEnableToken'];
+		if (\TYPO3\CMS\Core\FormProtection\FormProtectionFactory::get()->validateToken($token, 'installTool')) {
+			$installToolService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\EnableFileService');
+			$installToolService->createInstallToolEnableFile();
+			$this->redirect('index');
+		} else {
+			throw new \RuntimeException(
+				'Given form token was not valid',
+				1369161225
+			);
+		}
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/Exception.php b/typo3/sysext/install/Classes/Controller/Exception.php
new file mode 100644
index 000000000000..42439710cda0
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Exception.php
@@ -0,0 +1,33 @@
+<?php
+namespace TYPO3\CMS\Install\Controller;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * A controller exception
+ */
+class Exception extends \TYPO3\CMS\Install\Exception {
+
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/InstallToolModuleController.php b/typo3/sysext/install/Classes/Controller/InstallToolModuleController.php
deleted file mode 100644
index a7e1fa6b4eeb..000000000000
--- a/typo3/sysext/install/Classes/Controller/InstallToolModuleController.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller;
-
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2011-2013 Steffen Gebert <steffen.gebert@typo3.org>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-
-/**
- * Backend module of the 'install' extension, which automatically enables the
- * Install Tool, if it's accessed by an authenticated Backend user.
- *
- * @author Steffen Gebert <steffen.gebert@typo3.org>
- */
-class InstallToolModuleController extends \TYPO3\CMS\Backend\Module\BaseScriptClass {
-
-	/**
-	 * Entry point for the backend module
-	 *
-	 * @return void
-	 */
-	public function main() {
-		/** @var $installToolService \TYPO3\CMS\Install\EnableFileService */
-		$installToolService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\EnableFileService');
-		if ($installToolService->checkInstallToolEnableFile()) {
-			// Install Tool is already enabled
-			\TYPO3\CMS\Core\Utility\HttpUtility::redirect('install/');
-		} elseif ($this->isValidEnableRequest()) {
-			// Install Tool should be enabled
-			$installToolService->createInstallToolEnableFile();
-			\TYPO3\CMS\Core\Utility\HttpUtility::redirect('install/');
-		} else {
-			// ask the user to enable the Install Tool
-			$this->showInstallToolEnableRequest();
-		}
-	}
-
-	/**
-	 * Checks if enabling install tool is requested and form token is correct
-	 *
-	 * @return bool
-	 */
-	protected function isValidEnableRequest() {
-		return \TYPO3\CMS\Core\Utility\GeneralUtility::_POST('enableInstallTool') && \TYPO3\CMS\Core\FormProtection\FormProtectionFactory::get()->validateToken(\TYPO3\CMS\Core\Utility\GeneralUtility::_POST('formToken'), 'installToolEnableToken');
-	}
-
-	/**
-	 * Shows warning message about ENABLE_INSTALL_TOOL file and a button to create this file
-	 *
-	 * @return void
-	 */
-	protected function showInstallToolEnableRequest() {
-		// Create instance of object for output of data
-		$this->doc = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Template\\DocumentTemplate');
-		$this->doc->setModuleTemplate(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'mod/mod_template.html');
-		$this->doc->form = '<form method="post" id="t3-install-form-unlock" action="">';
-		$this->doc->addStyleSheet('install', 'stylesheets/install/install.css');
-		$this->doc->addStyleSheet('mod-install', \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extRelPath('install') . 'mod/mod_styles.css');
-		$markers = ($buttons = array());
-		$markers['CONTENT'] = $this->renderMessage();
-		$content = $this->doc->moduleBody('', $buttons, $markers);
-		$this->doc->postCode = '<input type="hidden" name="enableInstallTool" value="1" />' . \TYPO3\CMS\Backend\Form\FormEngine::getHiddenTokenField('installToolEnableToken');
-		echo $this->doc->render('', $content);
-	}
-
-	/**
-	 * Renders the message and the activation button
-	 *
-	 * @return string
-	 */
-	protected function renderMessage() {
-		/** @var $message \TYPO3\CMS\Core\Messaging\ErrorpageMessage */
-		$message = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Messaging\\ErrorpageMessage');
-		$message->setTitle($GLOBALS['LANG']->sL('LLL:EXT:install/mod/locallang_mod.xlf:confirmUnlockInstallToolTitle'));
-		$message->setSeverity(\TYPO3\CMS\Core\Messaging\ErrorpageMessage::WARNING);
-		$message->setHtmlTemplate('/typo3/sysext/install/Resources/Private/Templates/Notice.html');
-		$content = $GLOBALS['LANG']->sL('LLL:EXT:install/mod/locallang_mod.xlf:confirmUnlockInstallToolMessage') . '<button type="submit">' . $GLOBALS['LANG']->sL('LLL:EXT:install/mod/locallang_mod.xlf:confirmUnlockInstallToolButton') . '<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>';
-		$messageMarkers = array();
-		$messageMarkers['###CONTENT###'] = $content;
-		$message->setMarkers($messageMarkers);
-		return $message->render();
-	}
-
-}
-
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/StepController.php b/typo3/sysext/install/Classes/Controller/StepController.php
new file mode 100644
index 000000000000..16d6215d09a4
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/StepController.php
@@ -0,0 +1,319 @@
+<?php
+namespace TYPO3\CMS\Install\Controller;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Install step controller, dispatcher class of step actions.
+ */
+class StepController extends AbstractController {
+
+	/**
+	 * @var array List of valid action names that need authentication. Order is important!
+	 */
+	protected $authenticationActions = array(
+		'environmentAndFolders',
+		'databaseConnect',
+		'databaseSelect',
+		'databaseData',
+		'defaultConfiguration',
+	);
+
+	/**
+	 * Index action acts a a dispatcher to different steps
+	 *
+	 * @throws Exception
+	 * @return void
+	 */
+	public function execute() {
+		$this->loadBaseExtensions();
+		$this->initializeObjectManager();
+
+		// Warning: Order of this methods is security relevant and interferes with different access
+		// conditions (new/existing installation). See the single method comments for details.
+		$this->outputInstallToolNotEnabledMessageIfNeeded();
+		$this->migrateLocalconfToLocalConfigurationIfNeeded();
+		$this->outputInstallToolPasswordNotSetMessageIfNeeded();
+		$this->executeOrOutputFirstInstallStepIfNeeded();
+		$this->generateEncryptionKeyIfNeeded();
+		$this->initializeSession();
+		$this->checkSessionToken();
+		$this->checkSessionLifetime();
+		$this->loginIfRequested();
+		$this->outputLoginFormIfNotAuthorized();
+		$this->executeSpecificStep();
+		$this->outputSpecificStep();
+		$this->redirectToTool();
+	}
+
+	/**
+	 * Execute a step action if requested. If executed, a redirect is done, so
+	 * the next request will render step one again if needed or initiate a
+	 * request to test the next step.
+	 *
+	 * @throws Exception
+	 * @return void
+	 */
+	protected function executeSpecificStep() {
+		$action = $this->getAction();
+		$postValues = $this->getPostValues();
+		if ($action && isset($postValues['set']) && $postValues['set'] === 'execute') {
+			$stepAction = $this->getActionInstance($action);
+			$stepAction->setAction($action);
+			$stepAction->setToken($this->generateTokenForAction($action));
+			$stepAction->setPostValues($this->getPostValues());
+			$messages = $stepAction->execute();
+			$this->addSessionMessages($messages);
+			$this->redirect();
+		}
+	}
+
+	/**
+	 * Render a specific step. Fallback to first step if none is given.
+	 * The according step is instantiated and 'needsExecution' is called. If
+	 * it needs execution, the step will be rendered, otherwise a redirect
+	 * to test the next step is initiated.
+	 *
+	 * @return void
+	 */
+	protected function outputSpecificStep() {
+		$action = $this->getAction();
+		if ($action === '') {
+			// First step action
+			list($action) = $this->authenticationActions;
+		}
+		$stepAction = $this->getActionInstance($action);
+		$stepAction->setAction($action);
+		$stepAction->setController('step');
+		$stepAction->setToken($this->generateTokenForAction($action));
+		$stepAction->setPostValues($this->getPostValues());
+
+		if ($stepAction->needsExecution()) {
+			$stepAction->setMessages($this->session->getMessagesAndFlush());
+			$this->output($stepAction->handle());
+		} else {
+			// Redirect to next step if there are any
+			$currentPosition = array_keys($this->authenticationActions, $action, TRUE);
+			$nextAction = array_slice($this->authenticationActions, $currentPosition[0] + 1, 1);
+			if (!empty($nextAction)) {
+				$this->redirect('', $nextAction[0]);
+			}
+		}
+	}
+
+	/**
+	 * Instantiate a specific action class
+	 *
+	 * @param string $action Action to instantiate
+	 * @throws Exception
+	 * @return \TYPO3\CMS\Install\Controller\Action\Step\StepInterface
+	 */
+	protected function getActionInstance($action) {
+		$this->validateAuthenticationAction($action);
+		$actionClass = ucfirst($action);
+		/** @var \TYPO3\CMS\Install\Controller\Action\Step\StepInterface $stepAction */
+		$stepAction = $this->objectManager->get('TYPO3\\CMS\\Install\\Controller\\Action\\Step\\' . $actionClass);
+		if (!($stepAction instanceof Action\Step\StepInterface)) {
+			throw new Exception(
+				$action . ' does non implement StepInterface',
+				1371303903
+			);
+		}
+		return $stepAction;
+	}
+
+	/**
+	 * If the last step was reached and none needs execution, a redirect
+	 * to call the tool controller is initiated.
+	 *
+	 * @return void
+	 */
+	protected function redirectToTool() {
+		$this->redirect('tool');
+	}
+
+	/**
+	 * "Silent" upgrade very early in step installer, before rendering step 1:
+	 * If typo3conf and typo3conf/localconf.php exist, but no typo3conf/LocalConfiguration,
+	 * create LocalConfiguration.php / AdditionalConfiguration.php from localconf.php
+	 * Might throw exception if typo3conf directory is not writable.
+	 *
+	 * @return void
+	 */
+	protected function migrateLocalconfToLocalConfigurationIfNeeded() {
+		/** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
+		$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+
+		$localConfigurationFileLocation = $configurationManager->getLocalConfigurationFileLocation();
+		$localConfigurationFileExists = is_file($localConfigurationFileLocation);
+		$localConfFileLocation = PATH_typo3conf . 'localconf.php';
+		$localConfFileExists = is_file($localConfFileLocation);
+
+		if (is_dir(PATH_typo3conf) && $localConfFileExists && !$localConfigurationFileExists) {
+			$localConfContent = file($localConfFileLocation);
+
+			// Line array for the three categories: localConfiguration, db settings, additionalConfiguration
+			$typo3ConfigurationVariables = array();
+			$typo3DatabaseVariables = array();
+			$additionalConfiguration = array();
+			foreach ($localConfContent as $line) {
+				$line = trim($line);
+				$matches = array();
+				// Convert extList to array
+				if (
+					preg_match('/^\\$TYPO3_CONF_VARS\\[\'EXT\'\\]\\[\'extList\'\\] *={1} *\'(.+)\';{1}/', $line, $matches) === 1
+					|| preg_match('/^\\$GLOBALS\\[\'TYPO3_CONF_VARS\'\\]\\[\'EXT\'\\]\\[\'extList\'\\] *={1} *\'(.+)\';{1}/', $line, $matches) === 1
+				) {
+					$extListAsArray = GeneralUtility::trimExplode(',', $matches[1], TRUE);
+					$typo3ConfigurationVariables[] = '$TYPO3_CONF_VARS[\'EXT\'][\'extListArray\'] = ' . var_export($extListAsArray, TRUE) . ';';
+				} elseif (
+					preg_match('/^\\$TYPO3_CONF_VARS.+;{1}/', $line, $matches) === 1
+				) {
+					$typo3ConfigurationVariables[] = $matches[0];
+				} elseif (
+					preg_match('/^\\$GLOBALS\\[\'TYPO3_CONF_VARS\'\\].+;{1}/', $line, $matches) === 1
+				) {
+					$lineWithoutGlobals = str_replace('$GLOBALS[\'TYPO3_CONF_VARS\']', '$TYPO3_CONF_VARS', $matches[0]);
+					$typo3ConfigurationVariables[] = $lineWithoutGlobals;
+				} elseif (
+					preg_match('/^\\$typo_db.+;{1}/', $line, $matches) === 1
+				) {
+					eval($matches[0]);
+					if (isset($typo_db_host)) {
+						$typo3DatabaseVariables['host'] = $typo_db_host;
+					} elseif (isset($typo_db)) {
+						$typo3DatabaseVariables['database'] = $typo_db;
+					} elseif (isset($typo_db_username)) {
+						$typo3DatabaseVariables['username'] = $typo_db_username;
+					} elseif (isset($typo_db_password)) {
+						$typo3DatabaseVariables['password'] = $typo_db_password;
+					} elseif (isset($typo_db_extTableDef_script)) {
+						$typo3DatabaseVariables['extTablesDefinitionScript'] = $typo_db_extTableDef_script;
+					}
+					unset($typo_db_host, $typo_db, $typo_db_username, $typo_db_password, $typo_db_extTableDef_script);
+				} elseif (
+					strlen($line) > 0 && preg_match('/^\\/\\/.+|^#.+|^<\\?php$|^<\\?$|^\\?>$/', $line, $matches) === 0
+				) {
+					$additionalConfiguration[] = $line;
+				}
+			}
+
+			// Build new TYPO3_CONF_VARS array
+			$TYPO3_CONF_VARS = NULL;
+			eval(implode(LF, $typo3ConfigurationVariables));
+
+			// Add db settings to array
+			$TYPO3_CONF_VARS['DB'] = $typo3DatabaseVariables;
+			$TYPO3_CONF_VARS = \TYPO3\CMS\Core\Utility\ArrayUtility::sortByKeyRecursive($TYPO3_CONF_VARS);
+
+			// Write out new LocalConfiguration file
+			$configurationManager->writeLocalConfiguration($TYPO3_CONF_VARS);
+
+			// Write out new AdditionalConfiguration file
+			if (sizeof($additionalConfiguration) > 0) {
+				$configurationManager->writeAdditionalConfiguration($additionalConfiguration);
+			} else {
+				@unlink($configurationManager->getAdditionalConfigurationFileLocation());
+			}
+
+			// Move localconf.php to localconf.obsolete.php
+			rename($localConfFileLocation, PATH_site . 'typo3conf/localconf.obsolete.php');
+
+			// Perform a reload to self, so bootstrap now uses new LocalConfiguration.php
+			$this->redirect();
+		}
+	}
+
+	/**
+	 * The first install step has a special standing and needs separate handling:
+	 * At this point no directory exists (no typo3conf, no typo3temp), so we can
+	 * not start the session handling (that stores the install tool session within typo3temp).
+	 * This also means, we can not start the token handling for CSRF protection. This
+	 * is no real problem, since no local configuration or other security relevant
+	 * information was created yet.
+	 *
+	 * So, if no typo3conf directory exists yet, the first step is just rendered, or
+	 * executed if called so. After that, a redirect is initiated to proceed with
+	 * other tasks.
+	 *
+	 * @return void
+	 */
+	protected function executeOrOutputFirstInstallStepIfNeeded() {
+		$postValues = $this->getPostValues();
+
+		$wasExecuted= FALSE;
+		$errorMessagesFromExecute = array();
+		if (isset($postValues['action'])
+			&& $postValues['action'] === 'environmentAndFolders'
+		) {
+			/** @var \TYPO3\CMS\Install\Controller\Action\Step\StepInterface $action */
+			$action = $this->objectManager->get('TYPO3\\CMS\\Install\\Controller\\Action\\Step\\EnvironmentAndFolders');
+			$errorMessagesFromExecute = $action->execute();
+			$wasExecuted = TRUE;
+		}
+
+		/** @var \TYPO3\CMS\Install\Controller\Action\Step\StepInterface $action */
+		$action = $this->objectManager->get('TYPO3\\CMS\\Install\\Controller\\Action\\Step\\EnvironmentAndFolders');
+		$needsExecution = $action->needsExecution();
+
+		if (!is_dir(PATH_typo3conf)
+			|| count($errorMessagesFromExecute) > 0
+			|| $needsExecution
+		) {
+			/** @var \TYPO3\CMS\Install\Controller\Action\Step\StepInterface $action */
+			$action = $this->objectManager->get('TYPO3\\CMS\\Install\\Controller\\Action\\Step\\EnvironmentAndFolders');
+			$action->setController('step');
+			$action->setAction('environmentAndFolders');
+			if (count($errorMessagesFromExecute) > 0) {
+				$action->setMessages($errorMessagesFromExecute);
+			}
+			$this->output($action->handle());
+		}
+
+		if ($wasExecuted) {
+			$this->redirect();
+		}
+	}
+
+	/**
+	 * "Silent" upgrade: The encryption key is crucial for securing form tokens
+	 * and the whole TYPO3 link rendering later on. A random key is set here in
+	 * LocalConfiguration if it does not exist yet. This might possible happen
+	 * during upgrading and will happen during first install.
+	 *
+	 * @return void
+	 */
+	protected function generateEncryptionKeyIfNeeded() {
+		if (empty($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'])) {
+			$randomKey = GeneralUtility::getRandomHexString(96);
+			/** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
+			$configurationManager = $this->objectManager->get('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
+			$configurationManager->setLocalConfigurationValueByPath('SYS/encryptionKey', $randomKey);
+			$this->redirect();
+		}
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Controller/ToolController.php b/typo3/sysext/install/Classes/Controller/ToolController.php
new file mode 100644
index 000000000000..5b196a14a2b2
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/ToolController.php
@@ -0,0 +1,127 @@
+<?php
+namespace TYPO3\CMS\Install\Controller;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Install tool controller, dispatcher class of the install tool.
+ *
+ * Handles install tool session, login and login form rendering,
+ * calls actions that need authentication and handles form tokens.
+ */
+class ToolController extends AbstractController {
+
+	/**
+	 * @var array List of valid action names that need authentication
+	 */
+	protected $authenticationActions = array(
+		'welcome',
+		'importantActions',
+		'systemEnvironment',
+		'folderStructure',
+		'testSetup',
+		'updateWizard',
+		'allConfiguration',
+		'cleanUp',
+	);
+
+	/**
+	 * Main dispatch method
+	 *
+	 * @return void
+	 */
+	public function execute() {
+		$this->loadBaseExtensions();
+		$this->initializeObjectManager();
+
+		// Warning: Order of this methods is security relevant and interferes with different access
+		// conditions (new/existing installation). See the single method comments for details.
+		$this->outputInstallToolNotEnabledMessageIfNeeded();
+		$this->outputInstallToolPasswordNotSetMessageIfNeeded();
+		$this->initializeSession();
+		$this->checkSessionToken();
+		$this->checkSessionLifetime();
+		$this->logoutIfRequested();
+		$this->loginIfRequested();
+		$this->outputLoginFormIfNotAuthorized();
+		$this->dispatchAuthenticationActions();
+	}
+
+	/**
+	 * Logout user if requested
+	 *
+	 * @return void
+	 */
+	protected function logoutIfRequested() {
+		$action = $this->getAction();
+		if ($action === 'logout') {
+			// @TODO: This and similar code in step action DefaultConfiguration should be moved to enable install file service
+			$enableInstallToolFile = PATH_typo3conf . 'ENABLE_INSTALL_TOOL';
+			if (is_file($enableInstallToolFile) && trim(file_get_contents($enableInstallToolFile)) !== 'KEEP_FILE') {
+				unlink($enableInstallToolFile);
+			}
+
+			/** @var $formProtection \TYPO3\CMS\Core\FormProtection\InstallToolFormProtection */
+			$formProtection = \TYPO3\CMS\Core\FormProtection\FormProtectionFactory::get(
+				'TYPO3\\CMS\\Core\\FormProtection\\InstallToolFormProtection'
+			);
+			$formProtection->clean();
+			$this->session->destroySession();
+			$this->redirect();
+		}
+	}
+
+	/**
+	 * Call an action that needs authentication
+	 *
+	 * @throws Exception
+	 * @return string Rendered content
+	 */
+	protected function dispatchAuthenticationActions() {
+		$action = $this->getAction();
+		if ($action === '') {
+			$action = 'welcome';
+		}
+		$this->validateAuthenticationAction($action);
+		$actionClass = ucfirst($action);
+		/** @var \TYPO3\CMS\Install\Controller\Action\ActionInterface $toolAction */
+		$toolAction = $this->objectManager->get('TYPO3\\CMS\\Install\\Controller\\Action\\Tool\\' . $actionClass);
+		if (!($toolAction instanceof \TYPO3\CMS\Install\Controller\Action\ActionInterface)) {
+			throw new Exception(
+				$action . ' does non implement ActionInterface',
+				1369474308
+			);
+		}
+		$toolAction->setController('tool');
+		$toolAction->setAction($action);
+		$toolAction->setToken($this->generateTokenForAction($action));
+		$toolAction->setPostValues($this->getPostValues());
+		$this->output($toolAction->handle());
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/CoreUpdates/ExtensionManagerTables.php b/typo3/sysext/install/Classes/CoreUpdates/ExtensionManagerTables.php
index f1608f8267dd..0965b943f6f3 100644
--- a/typo3/sysext/install/Classes/CoreUpdates/ExtensionManagerTables.php
+++ b/typo3/sysext/install/Classes/CoreUpdates/ExtensionManagerTables.php
@@ -36,16 +36,16 @@ class ExtensionManagerTables extends \TYPO3\CMS\Install\Updates\AbstractUpdate {
 	protected $title = 'Add the default Extension Manager database tables';
 
 	/**
-	 * @var null|\TYPO3\CMS\Install\Sql\SchemaMigrator
+	 * @var null|\TYPO3\CMS\Install\Service\SqlSchemaMigrationService
 	 */
 	protected $installToolSqlParser = NULL;
 
 	/**
-	 * @return \TYPO3\CMS\Install\Sql\SchemaMigrator
+	 * @return \TYPO3\CMS\Install\Service\SqlSchemaMigrationService
 	 */
 	protected function getInstallToolSqlParser() {
 		if ($this->installToolSqlParser === NULL) {
-			$this->installToolSqlParser = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\Sql\\SchemaMigrator');
+			$this->installToolSqlParser = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\Service\\SqlSchemaMigrationService');
 		}
 
 		return $this->installToolSqlParser;
diff --git a/typo3/sysext/install/Classes/CoreUpdates/LocalConfigurationUpdate.php b/typo3/sysext/install/Classes/CoreUpdates/LocalConfigurationUpdate.php
deleted file mode 100644
index 5860958ff3d1..000000000000
--- a/typo3/sysext/install/Classes/CoreUpdates/LocalConfigurationUpdate.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\CoreUpdates;
-
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2012-2013 Helge Funk <helge.funk@e-net.info>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-/**
- * Move localconf.php to LocalConfiguration.php
- *
- * @author Helge Funk <helge.funk@e-net.info>
- */
-class LocalConfigurationUpdate extends \TYPO3\CMS\Install\Updates\AbstractUpdate {
-
-	/**
-	 * @var string The title
-	 */
-	protected $title = 'Update LocalConfiguration';
-
-	/**
-	 * Checks if localconf.php is available. If so, the update should be done
-	 *
-	 * @param string &$description: The description for the update
-	 * @return boolean TRUE if update should be done
-	 */
-	public function checkForUpdate(&$description) {
-		$description = 'The localconfiguration file typo3conf/localconf.php is deprecated and ' . ' unused since TYPO3 6.0. This wizard migrates the content of the file to the new ' . ' format.';
-		$description .= '<br /><strong>It is strongly recommended to run this wizard now.</strong><br />';
-		$description .= 'The old localconf.php file is renamed to localconf.obsolete.php and can' . ' be manually removed if everything works.';
-		$result = FALSE;
-		if (@is_file((PATH_typo3conf . 'localconf.php'))) {
-			$result = TRUE;
-		}
-		return $result;
-	}
-
-	/**
-	 * Performs the update action.
-	 *
-	 * The methods reads localconf.php line by line and classifies every line
-	 * to be either part of LocalConfiguration (everything that starts with TYPO3_CONF_VARS),
-	 * belongs to the database settings (those will be merged to TYPO3_CONF_VARS),
-	 * and everything else (those will be moved to the AdditionalConfiguration file.
-	 *
-	 * @param array &$dbQueries: Queries done in this update
-	 * @param mixed &$customMessages: Custom messages
-	 * @return boolean TRUE if everything went well
-	 */
-	public function performUpdate(array &$dbQueries, &$customMessages) {
-		$result = FALSE;
-		try {
-			$localConfigurationContent = file(PATH_typo3conf . 'localconf.php');
-
-			// Line array for the three categories: localConfiguration, db settings, additionalConfiguration
-			$typo3ConfigurationVariables = array();
-			$typo3DatabaseVariables = array();
-			$additionalConfiguration = array();
-			foreach ($localConfigurationContent as $line) {
-				$line = trim($line);
-				$matches = array();
-				// Convert extList to array
-				if (
-					preg_match('/^\\$TYPO3_CONF_VARS\\[\'EXT\'\\]\\[\'extList\'\\] *={1} *\'(.+)\';{1}/', $line, $matches) === 1
-					|| preg_match('/^\\$GLOBALS\\[\'TYPO3_CONF_VARS\'\\]\\[\'EXT\'\\]\\[\'extList\'\\] *={1} *\'(.+)\';{1}/', $line, $matches) === 1
-				) {
-					$extListAsArray = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', $matches[1], TRUE);
-					$typo3ConfigurationVariables[] = '$TYPO3_CONF_VARS[\'EXT\'][\'extListArray\'] = ' . var_export($extListAsArray, TRUE) . ';';
-				} elseif (
-					preg_match('/^\\$TYPO3_CONF_VARS.+;{1}/', $line, $matches) === 1
-				) {
-					$typo3ConfigurationVariables[] = $matches[0];
-				} elseif (
-					preg_match('/^\\$GLOBALS\\[\'TYPO3_CONF_VARS\'\\].+;{1}/', $line, $matches) === 1
-				) {
-					$lineWithoutGlobals = str_replace('$GLOBALS[\'TYPO3_CONF_VARS\']', '$TYPO3_CONF_VARS', $matches[0]);
-					$typo3ConfigurationVariables[] = $lineWithoutGlobals;
-				} elseif (
-					preg_match('/^\\$typo_db.+;{1}/', $line, $matches) === 1
-				) {
-					eval($matches[0]);
-					if (isset($typo_db_host)) {
-						$typo3DatabaseVariables['host'] = $typo_db_host;
-					} elseif (isset($typo_db)) {
-						$typo3DatabaseVariables['database'] = $typo_db;
-					} elseif (isset($typo_db_username)) {
-						$typo3DatabaseVariables['username'] = $typo_db_username;
-					} elseif (isset($typo_db_password)) {
-						$typo3DatabaseVariables['password'] = $typo_db_password;
-					} elseif (isset($typo_db_extTableDef_script)) {
-						$typo3DatabaseVariables['extTablesDefinitionScript'] = $typo_db_extTableDef_script;
-					}
-					unset($typo_db_host, $typo_db, $typo_db_username, $typo_db_password, $typo_db_extTableDef_script);
-				} elseif (
-					strlen($line) > 0 && preg_match('/^\\/\\/.+|^#.+|^<\\?php$|^<\\?$|^\\?>$/', $line, $matches) === 0
-				) {
-					$additionalConfiguration[] = $line;
-				}
-			}
-
-			// Build new TYPO3_CONF_VARS array
-			$TYPO3_CONF_VARS = NULL;
-			eval(implode(LF, $typo3ConfigurationVariables));
-
-			// Add db settings to array
-			$TYPO3_CONF_VARS['DB'] = $typo3DatabaseVariables;
-			$TYPO3_CONF_VARS = \TYPO3\CMS\Core\Utility\ArrayUtility::sortByKeyRecursive($TYPO3_CONF_VARS);
-
-			// Write out new LocalConfiguration file
-			\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->writeLocalConfiguration($TYPO3_CONF_VARS);
-
-			// Write out new AdditionalConfiguration file
-			if (sizeof($additionalConfiguration) > 0) {
-				\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->writeAdditionalConfiguration($additionalConfiguration);
-			} else {
-				@unlink(\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getAdditionalConfigurationFileLocation());
-			}
-
-			rename(PATH_site . 'typo3conf/localconf.php', PATH_site . 'typo3conf/localconf.obsolete.php');
-			$result = TRUE;
-		} catch (\Exception $e) {
-
-		}
-		return $result;
-	}
-
-}
-
-
-?>
diff --git a/typo3/sysext/dbal/Classes/ExtensionManager/MessageDisplay.php b/typo3/sysext/install/Classes/Database/DatabaseConnectionMock.php
similarity index 51%
rename from typo3/sysext/dbal/Classes/ExtensionManager/MessageDisplay.php
rename to typo3/sysext/install/Classes/Database/DatabaseConnectionMock.php
index 26d31e87c8d6..a7af13c4a91b 100644
--- a/typo3/sysext/dbal/Classes/ExtensionManager/MessageDisplay.php
+++ b/typo3/sysext/install/Classes/Database/DatabaseConnectionMock.php
@@ -1,10 +1,10 @@
 <?php
-namespace TYPO3\CMS\Dbal\ExtensionManager;
+namespace TYPO3\CMS\Install\Database;
 
 /***************************************************************
  *  Copyright notice
  *
- *  (c) 2009-2013 Xavier Perseguers <xavier@typo3.org>
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
  *  All rights reserved
  *
  *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -15,9 +15,6 @@ namespace TYPO3\CMS\Dbal\ExtensionManager;
  *
  *  The GNU General Public License can be found at
  *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
  *
  *  This script is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -26,35 +23,48 @@ namespace TYPO3\CMS\Dbal\ExtensionManager;
  *
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
+
 /**
- * Class that renders fields for the Extension Manager configuration.
- *
- * @author Xavier Perseguers <xavier@typo3.org>
+ * A "mock" to suppress database calls on $GLOBALS['TYPO3_DB'].
+ * Used in TestSetup install tool action to prevent caching in \TYPO3\CMS\Core\Imaging\GraphicalFunctions
  */
-class MessageDisplay {
+class DatabaseConnectionMock {
 
 	/**
-	 * Renders a message for EM.
+	 * Get single row mock
 	 *
-	 * @return string
+	 * @return NULL
 	 */
-	public function displayMessage() {
-		$out = '
-			<div>
-				<div class="typo3-message message-information">
-					<div class="message-header">PostgreSQL</div>
-					<div class="message-body">
-						If you use a PostgreSQL database, make sure to run SQL scripts located in<br />
-						<tt>' . \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('dbal') . 'res/postgresql/</tt><br />
-						to ensure best compatibility with TYPO3.
-					</div>
-				</div>
-			</div>
-		';
-		return $out;
+	public function exec_SELECTgetSingleRow() {
+		return NULL;
 	}
 
-}
+	/**
+	 * Insert row mock
+	 *
+	 * @return boolean TRUE
+	 */
+	public function exec_INSERTquery() {
+		return TRUE;
+	}
 
+	/**
+	 * Quote string mock
+	 *
+	 * @param string $string
+	 * @return string
+	 */
+	public function fullQuoteStr($string) {
+		return $string;
+	}
 
-?>
\ No newline at end of file
+	/**
+	 * Error mock
+	 *
+	 * @return string Empty string
+	 */
+	public function sql_error() {
+		return '';
+	}
+}
+?>
diff --git a/typo3/sysext/install/Classes/EidHandler.php b/typo3/sysext/install/Classes/EidHandler.php
deleted file mode 100644
index 386c0f8ab60c..000000000000
--- a/typo3/sysext/install/Classes/EidHandler.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install;
-
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2009-2013 Marcus Krause, Helmut Hummel (security@typo3.org)
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-/**
- * This is the eID handler for install tool AJAX calls.
- *
- * @author 	Marcus Krause <security@typo3.org>
- */
-class EidHandler {
-
-	/**
-	 * Keeps content to be printed.
-	 *
-	 * @var string
-	 * @todo Define visibility
-	 */
-	public $content;
-
-	/**
-	 * Keeps command to process.
-	 *
-	 * @var string
-	 * @todo Define visibility
-	 */
-	public $cmd = '';
-
-	/**
-	 * Init function, setting the input vars in the class scope.
-	 *
-	 * @return 	void
-	 * @todo Define visibility
-	 */
-	public function init() {
-		$this->cmd = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('cmd');
-	}
-
-	/**
-	 * Main function which creates the AJAX call return string.
-	 * It is stored in $this->content.
-	 *
-	 * @return 	void
-	 * @todo Define visibility
-	 */
-	public function main() {
-		// Create output:
-		switch ($this->cmd) {
-		case 'encryptionKey':
-
-		default:
-			$this->content = $this->createEncryptionKey();
-			$this->addTempContentHttpHeaders();
-			break;
-		}
-	}
-
-	/**
-	 * Outputs the content from $this->content
-	 *
-	 * @return 	void
-	 * @todo Define visibility
-	 */
-	public function printContent() {
-		if (!headers_sent()) {
-			header('Content-Length: ' . strlen($this->content));
-		}
-		echo $this->content;
-	}
-
-	/**
-	 * Returns a newly created TYPO3 encryption key with a given length.
-	 *
-	 * @param integer  $keyLength  desired key length
-	 * @return string
-	 * @todo Define visibility
-	 */
-	public function createEncryptionKey($keyLength = 96) {
-		if (!headers_sent()) {
-			header('Content-type: text/plain');
-		}
-		return \TYPO3\CMS\Core\Utility\GeneralUtility::getRandomHexString($keyLength);
-	}
-
-	/**
-	 * Sends cache control headers that prevent caching in user agents.
-	 *
-	 * @todo Define visibility
-	 */
-	public function addTempContentHttpHeaders() {
-		if (!headers_sent()) {
-			// see RFC 2616
-			// see Microsoft Knowledge Base #234067
-			header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
-			header('Cache-Control: no-cache, must-revalidate');
-			header('Pragma: no-cache');
-			header('Expires: -1');
-		}
-	}
-
-}
-
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/AbstractNode.php b/typo3/sysext/install/Classes/FolderStructure/AbstractNode.php
new file mode 100644
index 000000000000..48dbaa955f2b
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/AbstractNode.php
@@ -0,0 +1,221 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Status;
+
+/**
+ * Abstract node implements common methods
+ */
+abstract class AbstractNode {
+
+	/**
+	 * @var string Name
+	 */
+	protected $name = '';
+
+	/**
+	 * @var NULL|string Target permissions for unix, eg. 2770
+	 */
+	protected $targetPermission = NULL;
+
+	/**
+	 * @var NULL|NodeInterface Parent object of this structure node
+	 */
+	protected $parent = NULL;
+
+	/**
+	 * @var array Directories and root may have children, files and link always empty array
+	 */
+	protected $children = array();
+
+	/**
+	 * Get name
+	 *
+	 * @return string Name
+	 */
+	public function getName() {
+		return $this->name;
+	}
+
+	/**
+	 * Get target permission
+	 *
+	 * @return string Permission, eg. 2770
+	 */
+	public function getTargetPermission() {
+		return $this->targetPermission;
+	}
+
+	/**
+	 * Get children
+	 *
+	 * @return array
+	 */
+	public function getChildren() {
+		return $this->children;
+	}
+
+	/**
+	 * Get parent
+	 *
+	 * @return NULL|NodeInterface
+	 */
+	public function getParent() {
+		return $this->parent;
+	}
+
+	/**
+	 * Get absolute path of node
+	 *
+	 * @return string
+	 */
+	public function getAbsolutePath() {
+		return $this->parent->getAbsolutePath() . '/' . $this->name;
+	}
+
+	/**
+	 * Current node is writable if parent is writable
+	 *
+	 * @return boolean TRUE if parent is writable
+	 */
+	public function isWritable() {
+		return $this->parent->isWritable();
+	}
+
+	/**
+	 * Checks if node exists.
+	 * Returns TRUE if it is there, even if it is only a link.
+	 * Does not check the type!
+	 *
+	 * @return boolean
+	 */
+	protected function exists() {
+		if (is_link($this->getAbsolutePath())) {
+			return TRUE;
+		} else {
+			return file_exists($this->getAbsolutePath());
+		}
+	}
+
+	/**
+	 * Fix permission if they are not equal to target permission
+	 *
+	 * @throws Exception
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function fixPermission() {
+		if ($this->isPermissionCorrect()) {
+			throw new Exception(
+				'Permission on ' . $this->getAbsolutePath() . ' are already ok',
+				1366744035
+			);
+		}
+		$result = @chmod($this->getAbsolutePath(), octdec($this->targetPermission));
+		if ($result === TRUE) {
+			$status = new Status\OkStatus();
+			$status->setTitle('Fixed permission on ' . $this->getRelativePathBelowSiteRoot() . '.');
+		} else {
+			$status = new Status\ErrorStatus();
+			$status->setTitle('Permission change on ' . $this->getRelativePathBelowSiteRoot() . ' not successful!');
+			$status->setMessage(
+				'Permissions could not be changed to ' . $this->targetPermission . '. There is probably some' .
+					' group or owner permission problem on the parent directory.'
+			);
+		}
+		return $status;
+	}
+
+	/**
+	 * Checks if current permission are identical to target permission
+	 *
+	 * @return boolean
+	 */
+	protected function isPermissionCorrect() {
+		if ($this->isWindowsOs()) {
+			return TRUE;
+		}
+		if ($this->getCurrentPermission() === $this->targetPermission) {
+			return TRUE;
+		} else {
+			return FALSE;
+		}
+	}
+
+	/**
+	 * Get current permission of node
+	 *
+	 * @return string, eg. 2770 for dirs, 0660 for files
+	 */
+	protected function getCurrentPermission() {
+		$absolutePath = $this->getAbsolutePath();
+		$permissions = decoct(fileperms($this->getAbsolutePath()));
+		if (is_dir($absolutePath)) {
+			$result = substr($permissions, 1);
+		} else {
+			$result = substr($permissions, 2);
+		}
+		return $result;
+	}
+
+	/**
+	 * Returns TRUE if OS is windows
+	 *
+	 * @return boolean TRUE on windows
+	 */
+	protected function isWindowsOs() {
+		if (TYPO3_OS === 'WIN') {
+			return TRUE;
+		}
+		return FALSE;
+	}
+
+	/**
+	 * Cut off PATH_site from given path
+	 *
+	 * @param string $path Given path
+	 * @return string Relative path, but beginning with /
+	 * @throws Exception\InvalidArgumentException
+	 */
+	protected function getRelativePathBelowSiteRoot($path = NULL) {
+		if (is_null($path)) {
+			$path = $this->getAbsolutePath();
+		}
+		$pathSiteWithoutTrailingSlash = substr(PATH_site, 0, -1);
+		if (strpos($path, $pathSiteWithoutTrailingSlash, 0) !== 0) {
+			throw new \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException(
+				'PATH_site is not first part of given path',
+				1366398198
+			);
+		}
+		$relativePath = substr($path, strlen($pathSiteWithoutTrailingSlash), strlen($path));
+		// Add a forward slash again, so we don't end up with an empty string
+		if (strlen($relativePath) === 0) {
+			$relativePath = '/';
+		}
+		return $relativePath;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php b/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php
new file mode 100644
index 000000000000..7a9375f70cd9
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php
@@ -0,0 +1,275 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Factory returns default folder structure object hierachie
+ */
+class DefaultFactory {
+
+	/**
+	 * @var array Expected folder structure
+	 */
+	protected $expectedDefaultStructure = array();
+
+	/**
+	 * Constructor
+	 */
+	public function __construct() {
+		$this->expectedDefaultStructure = array(
+			// Cut off trailing forward / from PATH_site, so root node has no trailing slash like all others
+			'name' => substr(PATH_site, 0, -1),
+			'targetPermission' => '2770',
+			'children' => array(
+				array(
+					'name' => 'typo3temp',
+					'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+					'targetPermission' => '2770',
+					'children' => array(
+						array(
+							'name' => 'index.html',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\FileNode',
+							'targetPermission' => '0660',
+							'targetContent' => '',
+						),
+						array(
+							'name' => 'compressor',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+						),
+						array(
+							'name' => 'cs',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+						),
+						array(
+							'name' => 'Cache',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+						),
+						array(
+							'name' => 'GB',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+						),
+						array(
+							'name' => 'llxml',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+						),
+						array(
+							'name' => 'locks',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+						),
+						array(
+							'name' => 'pics',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+						),
+						array(
+							'name' => 'sprites',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+						),
+						array(
+							'name' => 'temp',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+						),
+					),
+				),
+				array(
+					'name' => 'typo3conf',
+					'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+					'targetPermission' => '2770',
+					'children' => array(
+						array(
+							'name' => 'ext',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+						),
+						array(
+							'name' => 'l10n',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+						),
+					),
+				),
+				array(
+					'name' => 'uploads',
+					'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+					'targetPermission' => '2770',
+					'children' => array(
+						array(
+							'name' => 'index.html',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\FileNode',
+							'targetPermission' => '0660',
+							'targetContent' =>
+								'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">' . LF .
+								'<HTML>' . LF .
+								'<HEAD>' . LF .
+								TAB . '<TITLE></TITLE>' . LF .
+								'<META http-equiv=Refresh Content="0; Url=../">' . LF .
+								'</HEAD>' . LF .
+								'</HTML>',
+						),
+						array(
+							'name' => 'media',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+							'children' => array(
+								array(
+									'name' => 'index.html',
+									'type' => 'TYPO3\\CMS\\install\\FolderStructure\\FileNode',
+									'targetPermission' => '0660',
+									'targetContent' => '',
+								),
+							),
+						),
+						array(
+							'name' => 'pics',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+							'children' => array(
+								array(
+									'name' => 'index.html',
+									'type' => 'TYPO3\\CMS\\install\\FolderStructure\\FileNode',
+									'targetPermission' => '0660',
+									'targetContent' => '',
+								),
+							),
+						),
+						array(
+							'name' => 'tf',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+							'children' => array(
+								array(
+									'name' => 'index.html',
+									'type' => 'TYPO3\\CMS\\install\\FolderStructure\\FileNode',
+									'targetPermission' => '0660',
+									'targetContent' => '',
+								),
+							),
+						),
+					),
+				),
+				array(
+					'name' => 'fileadmin',
+					'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+					'targetPermission' => '2770',
+					'children' => array(
+						array(
+							'name' => '_temp_',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+							'children' => array(
+								array(
+									'name' => '.htaccess',
+									'type' => 'TYPO3\\CMS\\install\\FolderStructure\\FileNode',
+									'targetPermission' => '0660',
+									'targetContent' =>
+										'# This file restricts access to the fileadmin/_temp_ directory. It is' . LF .
+										'# meant to protect temporary files which could contain sensible' . LF .
+										'# information. Please do not touch.' . LF .
+										LF .
+										'Order deny,allow' . LF .
+										'Deny from all' . LF,
+								),
+								array(
+									'name' => 'index.html',
+									'type' => 'TYPO3\\CMS\\install\\FolderStructure\\FileNode',
+									'targetPermission' => '0660',
+									'targetContent' =>
+										'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">' . LF .
+										'<HTML>' . LF .
+										'<HEAD>' . LF .
+										TAB . '<TITLE></TITLE>' . LF .
+										'<META http-equiv=Refresh Content="0; Url=/">' . LF .
+										'</HEAD>' . LF .
+										'</HTML>',
+								),
+							),
+						),
+						array(
+							'name' => 'user_upload',
+							'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+							'targetPermission' => '2770',
+							'children' => array(
+								array(
+									'name' => '_temp_',
+									'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+									'targetPermission' => '2770',
+									'children' => array(
+										array(
+											'name' => 'index.html',
+											'type' => 'TYPO3\\CMS\\install\\FolderStructure\\FileNode',
+											'targetPermission' => '0660',
+											'targetContent' => '',
+										),
+									),
+								),
+								array(
+									'name' => 'index.html',
+									'type' => 'TYPO3\\CMS\\install\\FolderStructure\\FileNode',
+									'targetPermission' => '0660',
+									'targetContent' => '',
+								),
+							),
+						),
+					),
+				),
+			),
+		);
+	}
+
+	/**
+	 * Get default structure object hierarchy
+	 *
+	 * @throws Exception
+	 * @return RootNode
+	 * @TODO: Use objectManager instead of new (will be injected)
+	 * @TODO: Handle targetPermission for files / directory if set in TYPO3_CONF_VARS
+	 */
+	public function getStructure() {
+		$rootNode = new RootNode($this->expectedDefaultStructure, NULL);
+		if (!($rootNode instanceof RootNodeInterface)) {
+			throw new Exception(
+				'Root node must implement RootNodeInterface',
+				1366139176
+			);
+		}
+		$structureFacade = new StructureFacade($rootNode);
+		if (!($structureFacade instanceof StructureFacadeInterface)) {
+			throw new Exception(
+				'Structure facade must implement StructureFacadeInterface',
+				1366535827
+			);
+		}
+		return $structureFacade;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/DirectoryNode.php b/typo3/sysext/install/Classes/FolderStructure/DirectoryNode.php
new file mode 100644
index 000000000000..2154ef5dbb92
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/DirectoryNode.php
@@ -0,0 +1,283 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Status;
+
+/**
+ * A directory
+ */
+class DirectoryNode extends AbstractNode implements NodeInterface {
+
+	/**
+	 * @var NULL|string Default for directories is 2770
+	 */
+	protected $targetPermission = '2770';
+
+	/**
+	 * Implement constructor
+	 *
+	 * @param array $structure Structure array
+	 * @param NodeInterface $parent Parent object
+	 * @throws Exception\InvalidArgumentException
+	 */
+	public function __construct(array $structure, NodeInterface $parent = NULL) {
+		if (is_null($parent)) {
+			throw new \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException(
+				'Node must have parent',
+				1366222203
+			);
+		}
+		$this->parent = $parent;
+
+		// Ensure name is a single segment, but not a path like foo/bar or an absolute path /foo
+		if (strstr($structure['name'], '/') !== FALSE) {
+			throw new \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException(
+				'Directory name must not contain forward slash',
+				1366226639
+			);
+		}
+		$this->name = $structure['name'];
+
+		if (isset($structure['targetPermission'])) {
+			$this->targetPermission = $structure['targetPermission'];
+		}
+
+		if (array_key_exists('children', $structure)) {
+			$this->createChildren($structure['children']);
+		}
+	}
+
+	/**
+	 * Get own status and status of child objects
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function getStatus() {
+		$result = array();
+		if (!$this->exists()) {
+			$status = new Status\WarningStatus();
+			$status->setTitle($this->getRelativePathBelowSiteRoot() . ' does not exist');
+			$result[] = $status;
+		} else {
+			$result[] = $this->getSelfStatus();
+		}
+		$result = array_merge($result, $this->getChildrenStatus());
+		return $result;
+	}
+
+	/**
+	 * Create a test file and delete again if directory exists
+	 *
+	 * @return boolean TRUE if test file creation was successful
+	 */
+	public function isWritable() {
+		$result = TRUE;
+		if (!$this->exists()) {
+			$result = FALSE;
+		} elseif (!$this->canFileBeCreated()) {
+			$result = FALSE;
+		}
+		return $result;
+	}
+
+	/**
+	 * Fix structure
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function fix() {
+		$result = $this->fixSelf();
+		foreach ($this->children as $child) {
+			/** @var $child NodeInterface */
+			$result = array_merge($result, $child->fix());
+		}
+		return $result;
+	}
+
+	/**
+	 * Fix this node: create if not there, fix permissions
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	protected function fixSelf() {
+		$result = array();
+		if (!$this->exists()) {
+			$result[] = $this->createDirectory();
+		}
+		if (!$this->isDirectory()) {
+			$status = new Status\ErrorStatus();
+			$status->setTitle('Path ' . $this->getRelativePathBelowSiteRoot() . ' is not a directory');
+			$status->setMessage(
+				'The target ' . $this->getRelativePathBelowSiteRoot() . ' should be a directory,' .
+				' but is of type ' . filetype($this->getAbsolutePath()) . '. I can not fix this. Please investigate.'
+			);
+			$result[] = $status;
+		} elseif (!$this->isPermissionCorrect()) {
+			$result[] = $this->fixPermission();
+		}
+		return $result;
+	}
+
+	/**
+	 * Create directory if not exists
+	 *
+	 * @throws Exception
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function createDirectory() {
+		if ($this->exists()) {
+			throw new Exception(
+				'Directory ' . $this->getAbsolutePath() . ' already exists',
+				1366740091
+			);
+		}
+		$result = @mkdir($this->getAbsolutePath());
+		if ($result === TRUE) {
+			$status = new Status\OkStatus();
+			$status->setTitle('Directory ' . $this->getRelativePathBelowSiteRoot() . ' successfully created.');
+		} else {
+			$status = new Status\ErrorStatus();
+			$status->setTitle('Directory ' . $this->getRelativePathBelowSiteRoot() . ' not created!');
+			$status->setMessage(
+				'The target directory could not be created. There is probably some' .
+				' group or owner permission problem on the parent directory.'
+			);
+		}
+		return $status;
+	}
+
+	/**
+	 * Get status of directory - used in root and directory node
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function getSelfStatus() {
+		$result = NULL;
+		if (!$this->isDirectory()) {
+			$status = new Status\ErrorStatus();
+			$status->setTitle($this->getRelativePathBelowSiteRoot() . ' is not a directory');
+			$status->setMessage(
+				'Path ' . $this->getAbsolutePath() . ' should be a directory,' .
+				' but is of type ' . filetype($this->getAbsolutePath())
+			);
+			$result = $status;
+		} elseif (!$this->isWritable()) {
+			$status = new Status\WarningStatus();
+			$status->setTitle($this->getRelativePathBelowSiteRoot() . ' is not writable');
+			$status->setMessage(
+				'Path ' . $this->getAbsolutePath() . ' exists, but no file below' .
+				' can be created.'
+			);
+			$result = $status;
+		} elseif (!$this->isPermissionCorrect()) {
+			$status = new Status\WarningStatus();
+			$status->setTitle($this->getRelativePathBelowSiteRoot() . ' has wrong permission');
+			$status->setMessage(
+				'Target permission are ' . $this->targetPermission .
+				' but current permission are ' . $this->getCurrentPermission()
+			);
+			$result = $status;
+		} else {
+			$status = new Status\OkStatus();
+			$status->setTitle($this->getRelativePathBelowSiteRoot());
+			$result = $status;
+		}
+		return $result;
+	}
+
+	/**
+	 * Get status of children
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	protected function getChildrenStatus() {
+		$result = array();
+		foreach ($this->children as $child) {
+			/** @var $child NodeInterface */
+			$result = array_merge($result, $child->getStatus());
+		}
+		return $result;
+	}
+
+	/**
+	 * Create a test file and delete again - helper for isWritable
+	 *
+	 * @return boolean TRUE if test file creation was successful
+	 */
+	protected function canFileBeCreated() {
+		$testFileName = uniqid('installToolTest_');
+		$result = @touch($this->getAbsolutePath() . '/' . $testFileName);
+		if ($result === TRUE) {
+			unlink($this->getAbsolutePath() . '/' . $testFileName);
+		}
+		return $result;
+	}
+
+	/**
+	 * Checks if not is a directory
+	 *
+	 * @return boolean True if node is a directory
+	 */
+	protected function isDirectory() {
+		$path = $this->getAbsolutePath();
+		return (!is_link($path) && is_dir($path));
+	}
+
+	/**
+	 * Create children nodes - done in directory and root node
+	 *
+	 * @param array $structure Array of childs
+	 * @throws Exception\InvalidArgumentException
+	 */
+	protected function createChildren(array $structure) {
+		foreach ($structure as $child) {
+			if (!array_key_exists('type', $child)) {
+				throw new \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException(
+					'Child must have type',
+					1366222204
+				);
+			}
+			if (!array_key_exists('name', $child)) {
+				throw new \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException(
+					'Child must have name',
+					1366222205
+				);
+			}
+			$name = $child['name'];
+			foreach ($this->children as $existingChild) {
+				/** @var $existingChild NodeInterface */
+				if ($existingChild->getName() === $name) {
+					throw new \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException(
+						'Child name must be unique',
+						1366222206
+					);
+				}
+			}
+			$this->children[] = new $child['type']($child, $this);
+		}
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/Exception.php b/typo3/sysext/install/Classes/FolderStructure/Exception.php
new file mode 100644
index 000000000000..289867c88fa1
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/Exception.php
@@ -0,0 +1,33 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * A folder structure exception
+ */
+class Exception extends \TYPO3\CMS\Install\Exception {
+
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/Exception/InvalidArgumentException.php b/typo3/sysext/install/Classes/FolderStructure/Exception/InvalidArgumentException.php
new file mode 100644
index 000000000000..cd69f53a58f4
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/Exception/InvalidArgumentException.php
@@ -0,0 +1,33 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure\Exception;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * An invalid argument exception
+ */
+class InvalidArgumentException extends \TYPO3\CMS\Install\FolderStructure\Exception {
+
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/Exception/RootNodeException.php b/typo3/sysext/install/Classes/FolderStructure/Exception/RootNodeException.php
new file mode 100644
index 000000000000..10791303021b
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/Exception/RootNodeException.php
@@ -0,0 +1,33 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure\Exception;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * A root node exception
+ */
+class RootNodeException extends \TYPO3\CMS\Install\FolderStructure\Exception {
+
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/FileNode.php b/typo3/sysext/install/Classes/FolderStructure/FileNode.php
new file mode 100644
index 000000000000..4743330b2db3
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/FileNode.php
@@ -0,0 +1,281 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Status;
+
+/**
+ * A file
+ */
+class FileNode extends AbstractNode implements NodeInterface {
+
+	/**
+	 * @var NULL|string Default for files is 0660
+	 */
+	protected $targetPermission = '0660';
+
+	/**
+	 * @var string|NULL Target content of file. If NULL, target content is ignored
+	 */
+	protected $targetContent = NULL;
+
+	/**
+	 * Implement constructor
+	 *
+	 * @param array $structure Structure array
+	 * @param NodeInterface $parent Parent object
+	 * @throws Exception\InvalidArgumentException
+	 */
+	public function __construct(array $structure, NodeInterface $parent = NULL) {
+		if (is_null($parent)) {
+			throw new \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException(
+				'File node must have parent',
+				1366927513
+			);
+		}
+		$this->parent = $parent;
+
+		// Ensure name is a single segment, but not a path like foo/bar or an absolute path /foo
+		if (strstr($structure['name'], '/') !== FALSE) {
+			throw new \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException(
+				'File name must not contain forward slash',
+				1366222204
+			);
+		}
+		$this->name = $structure['name'];
+
+		if (isset($structure['targetPermission'])) {
+			$this->targetPermission = $structure['targetPermission'];
+		}
+
+		if (isset($structure['targetContent'])) {
+			$this->targetContent = $structure['targetContent'];
+		}
+	}
+
+	/**
+	 * Get own status
+	 * Returns warning if file not exists
+	 * Returns error if file exists but content is not as expected (can / shouldn't be fixed)
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function getStatus() {
+		$result = array();
+		if (!$this->exists()) {
+			$status = new Status\WarningStatus();
+			$status->setTitle($this->getRelativePathBelowSiteRoot() . ' does not exist');
+			$result[] = $status;
+		} else {
+			$result[] = $this->getSelfStatus();
+		}
+		return $result;
+	}
+
+	/**
+	 * Fix structure
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function fix() {
+		$result = $this->fixSelf();
+		return $result;
+	}
+
+	/**
+	 * Fix this node: create if not there, fix permissions
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	protected function fixSelf() {
+		$result = array();
+		if (!$this->exists()) {
+			$resultCreateFile = $this->createFile();
+			$result[] = $resultCreateFile;
+			if ($resultCreateFile instanceof \TYPO3\CMS\Install\Status\OkStatus
+				&& !is_null($this->targetContent)
+			) {
+				$result[] = $this->setContent();
+			}
+		}
+		if (!$this->isFile()) {
+			$status = new Status\ErrorStatus();
+			$status->setTitle('Path ' . $this->getRelativePathBelowSiteRoot() . ' is not a file');
+			$status->setMessage(
+				'The target ' . $this->getRelativePathBelowSiteRoot() . ' should be a file,' .
+				' but is of type ' . filetype($this->getAbsolutePath()) . '. I can not fix this. Please investigate.'
+			);
+			$result[] = $status;
+		} elseif (!$this->isPermissionCorrect()) {
+			$result[] = $this->fixPermission();
+		}
+		return $result;
+	}
+
+	/**
+	 * Create file if not exists
+	 *
+	 * @throws Exception
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function createFile() {
+		if ($this->exists()) {
+			throw new Exception(
+				'File ' . $this->getAbsolutePath() . ' already exists',
+				1367048077
+			);
+		}
+		$result = @touch($this->getAbsolutePath());
+		if ($result === TRUE) {
+			$status = new Status\OkStatus();
+			$status->setTitle('File ' . $this->getRelativePathBelowSiteRoot() . ' successfully created.');
+		} else {
+			$status = new Status\ErrorStatus();
+			$status->setTitle('File ' . $this->getRelativePathBelowSiteRoot() . ' not created!');
+			$status->setMessage(
+				'The target file could not be created. There is probably some' .
+				' group or owner permission problem on the parent directory.'
+			);
+		}
+		return $status;
+	}
+
+	/**
+	 * Get status of file
+	 *
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function getSelfStatus() {
+		$result = NULL;
+		if (!$this->isFile()) {
+			$status = new Status\ErrorStatus();
+			$status->setTitle($this->getRelativePathBelowSiteRoot() . ' is not a file');
+			$status->setMessage(
+				'Path ' . $this->getAbsolutePath() . ' should be a file,' .
+				' but is of type ' . filetype($this->getAbsolutePath())
+			);
+			$result = $status;
+		} elseif (!$this->isWritable()) {
+			$status = new Status\WarningStatus();
+			$status->setTitle($this->getRelativePathBelowSiteRoot() . ' is not writable');
+			$status->setMessage(
+				'Path ' . $this->getAbsolutePath() . ' exists, but no file below' .
+				' can be created.'
+			);
+			$result = $status;
+		} elseif (!$this->isPermissionCorrect()) {
+			$status = new Status\WarningStatus();
+			$status->setTitle($this->getRelativePathBelowSiteRoot() . ' has wrong permission');
+			$status->setMessage(
+				'Target permission are ' . $this->targetPermission .
+				' but current permission are ' . $this->getCurrentPermission()
+			);
+			$result = $status;
+		} elseif (!$this->isContentCorrect()) {
+			$status = new Status\ErrorStatus();
+			$status->setTitle($this->getRelativePathBelowSiteRoot() . ' content differs');
+			$status->setMessage(
+				'File content is not identical to target content. Probably, this file was' .
+				' changed manually. The content will not be fixed to not override your changes.'
+			);
+			$result = $status;
+		} else {
+			$status = new Status\OkStatus();
+			$status->setTitle($this->getRelativePathBelowSiteRoot());
+			$result = $status;
+		}
+		return $result;
+	}
+
+	/**
+	 * Compare current file content with target file content
+	 *
+	 * @throws Exception If file does not exist
+	 * @return boolean TRUE if current and target file content are identical
+	 */
+	protected function isContentCorrect() {
+		$absolutePath = $this->getAbsolutePath();
+		if (is_link($absolutePath) || !is_file($absolutePath)) {
+			throw new Exception(
+				'File ' . $absolutePath . ' must exist',
+				1367056363
+			);
+		}
+		$result = FALSE;
+		if (is_null($this->targetContent)) {
+			$result = TRUE;
+		} else {
+			$targetContentHash = md5($this->targetContent);
+			$currentContentHash = md5(file_get_contents($absolutePath));
+			if ($targetContentHash === $currentContentHash) {
+				$result = TRUE;
+			}
+		}
+		return $result;
+	}
+
+	/**
+	 * Sets content of file to target content
+	 *
+	 * @throws Exception If file does not exist
+	 * @return \TYPO3\CMS\Install\Status\StatusInterface
+	 */
+	protected function setContent() {
+		$absolutePath = $this->getAbsolutePath();
+		if (is_link($absolutePath) || !is_file($absolutePath)) {
+			throw new Exception(
+				'File ' . $absolutePath . ' must exist',
+				1367060201
+			);
+		}
+		if (is_null($this->targetContent)) {
+			throw new Exception(
+				'Target content not defined for ' . $absolutePath,
+				1367060202
+			);
+		}
+		$result = @file_put_contents($absolutePath, $this->targetContent);
+		if ($result !== FALSE) {
+			$status = new Status\OkStatus();
+			$status->setTitle('Set content to ' . $this->getRelativePathBelowSiteRoot());
+		} else {
+			$status = new Status\ErrorStatus();
+			$status->setTitle('Setting content to ' . $this->getRelativePathBelowSiteRoot() . ' failed');
+			$status->setMessage('Setting content of the file failed for unknown reasons.');
+		}
+		return $status;
+	}
+
+	/**
+	 * Checks if not is a file
+	 *
+	 * @return boolean
+	 */
+	protected function isFile() {
+		$path = $this->getAbsolutePath();
+		return (!is_link($path) && is_file($path));
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/NodeInterface.php b/typo3/sysext/install/Classes/FolderStructure/NodeInterface.php
new file mode 100644
index 000000000000..3c6bcfc2d865
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/NodeInterface.php
@@ -0,0 +1,89 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Interface for structure nodes root, link, file, ...
+ */
+interface NodeInterface {
+
+	/**
+	 * Constructor gets structure and parent object defaulting to NULL
+	 *
+	 * @param array $structure Structure
+	 * @param NodeInterface $parent Parent
+	 */
+	public function __construct(array $structure, NodeInterface $parent = NULL);
+
+	/**
+	 * Get node name
+	 *
+	 * @return string Node name
+	 */
+	public function getName();
+
+	/**
+	 * Get target permission
+	 *
+	 * @return string Permission, eg. 2770
+	 */
+	public function getTargetPermission();
+
+	/**
+	 * Return children - root and directory, link and file always return empty array
+	 *
+	 * @return array Children
+	 */
+	public function getChildren();
+
+	/**
+	 * Get absolute path of node
+	 *
+	 * @return string Absolute path
+	 */
+	public function getAbsolutePath();
+
+	/**
+	 * Get the status of the object tree, recursive for directory and root node
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function getStatus();
+
+	/**
+	 * Check if node is writable - can be created and permission can be fixed
+	 *
+	 * @return boolean TRUE if node is writable
+	 */
+	public function isWritable();
+
+	/**
+	 * Fix structure
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function fix();
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/RootNode.php b/typo3/sysext/install/Classes/FolderStructure/RootNode.php
new file mode 100644
index 000000000000..4536e3d12862
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/RootNode.php
@@ -0,0 +1,97 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Install\Status;
+
+/**
+ * Root node of structure
+ */
+class RootNode extends DirectoryNode implements RootNodeInterface {
+
+	/**
+	 * Implement constructor
+	 *
+	 * @param array $structure Given structure
+	 * @param NodeInterface $parent Must be NULL for RootNode
+	 * @throws Exception\RootNodeException
+	 * @throws Exception\InvalidArgumentException
+	 */
+	public function __construct(array $structure, NodeInterface $parent = NULL) {
+		if (!is_null($parent)) {
+			throw new \TYPO3\CMS\Install\FolderStructure\Exception\RootNodeException(
+				'Root node must not have parent',
+				1366140117
+			);
+		}
+
+		if (!isset($structure['name'])
+			|| ($this->isWindowsOs() && substr($structure['name'], 1, 2) !== ':/')
+			|| (!$this->isWindowsOs() && substr($structure['name'], 0, 1) !== '/')
+		) {
+			throw new \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException(
+				'Root node expects absolute path as name',
+				1366141329
+			);
+		}
+		$this->name = $structure['name'];
+
+		if (isset($structure['targetPermission'])) {
+			$this->targetPermission = $structure['targetPermission'];
+		}
+
+		if (array_key_exists('children', $structure)) {
+			$this->createChildren($structure['children']);
+		}
+	}
+
+	/**
+	 * Get own status and status of child objects - Root node gives error status if not exists
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function getStatus() {
+		$result = array();
+		if (!$this->exists()) {
+			$status = new Status\ErrorStatus();
+			$status->setTitle($this->getAbsolutePath() . ' does not exist');
+			$result[] = $status;
+		} else {
+			$result[] = $this->getSelfStatus();
+		}
+		$result = array_merge($result, $this->getChildrenStatus());
+		return $result;
+	}
+
+	/**
+	 * Root node does not call parent, but returns own name only
+	 *
+	 * @return string Absolute path
+	 */
+	public function getAbsolutePath() {
+		return $this->name;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/RootNodeInterface.php b/typo3/sysext/install/Classes/FolderStructure/RootNodeInterface.php
new file mode 100644
index 000000000000..1a8fe027229c
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/RootNodeInterface.php
@@ -0,0 +1,33 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Interface implemented by root node
+ */
+interface RootNodeInterface extends NodeInterface {
+
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/StructureFacade.php b/typo3/sysext/install/Classes/FolderStructure/StructureFacade.php
new file mode 100644
index 000000000000..af667ee89db1
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/StructureFacade.php
@@ -0,0 +1,68 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Structure facade, a facade class in front of root node.
+ * This is the main API interface to the node structure and should
+ * be the only class used from outside.
+ *
+ * @api
+ */
+class StructureFacade implements StructureFacadeInterface {
+
+	/**
+	 * @var RootNodeInterface The structure to work on
+	 */
+	protected $structure;
+
+	/**
+	 * Constructor sets structure to work on
+	 *
+	 * @param RootNodeInterface $structure
+	 */
+	public function __construct(RootNodeInterface $structure) {
+		$this->structure = $structure;
+	}
+
+	/**
+	 * Get status of node tree
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function getStatus() {
+		return $this->structure->getStatus();
+	}
+
+	/**
+	 * Fix structure
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function fix() {
+		return $this->structure->fix();
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/FolderStructure/StructureFacadeInterface.php b/typo3/sysext/install/Classes/FolderStructure/StructureFacadeInterface.php
new file mode 100644
index 000000000000..e612500575b0
--- /dev/null
+++ b/typo3/sysext/install/Classes/FolderStructure/StructureFacadeInterface.php
@@ -0,0 +1,53 @@
+<?php
+namespace TYPO3\CMS\Install\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Interface of structure facade, a facade class in front of root node
+ */
+interface StructureFacadeInterface {
+
+	/**
+	 * Constructor gets structure to work on
+	 *
+	 * @param RootNodeInterface $structure
+	 */
+	public function __construct(RootNodeInterface $structure);
+
+	/**
+	 * Get status of node tree
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function getStatus();
+
+	/**
+	 * Fix structure
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
+	 */
+	public function fix();
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/InstallBootstrap.php b/typo3/sysext/install/Classes/InstallBootstrap.php
deleted file mode 100644
index 8a35f54b213b..000000000000
--- a/typo3/sysext/install/Classes/InstallBootstrap.php
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install;
-
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2012-2013 Christian Kuhn <lolli@schwarzbu.ch>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- *
- ***************************************************************/
-/**
- * Encapsulate install tool specific bootstrap methods.
- *
- * This script is internal code and subject to change.
- * DO NOT use it in own code, or be prepared your code might
- * break in future core versions.
- *
- * @author Christian Kuhn <lolli@schwarzbu.ch>
- */
-class InstallBootstrap {
-
-	/**
-	 * During first install, typo3conf/LocalConfiguration.php does not
-	 * exist. It is created now based on factory configuration as a
-	 * first action in the install process.
-	 *
-	 * @return void
-	 * @internal This is not a public API method, do not use in own extensions
-	 */
-	static public function createLocalConfigurationIfNotExists() {
-		/** @var $configurationManager \TYPO3\CMS\Core\Configuration\ConfigurationManager */
-		$configurationManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager');
-		if (
-			!file_exists($configurationManager->getLocalConfigurationFileLocation())
-			&& !file_exists($configurationManager->getLocalconfFileLocation())
-		) {
-			$configurationManager->createLocalConfigurationFromFactoryConfiguration();
-		}
-	}
-
-	/**
-	 * Check ENABLE_INSTALL_TOOL and FIRST_INSTALL file in typo3conf
-	 * or exit the script if conditions to access the install tool are not met.
-	 *
-	 * @return void
-	 * @internal This is not a public API method, do not use in own extensions
-	 */
-	static public function checkEnabledInstallToolOrDie() {
-		$quickstartFile = PATH_site . 'typo3conf/FIRST_INSTALL';
-		$enableInstallToolFile = PATH_site . 'typo3conf/ENABLE_INSTALL_TOOL';
-		// If typo3conf/FIRST_INSTALL is present and can be deleted, automatically create typo3conf/ENABLE_INSTALL_TOOL
-		if (is_file($quickstartFile) && is_writeable($quickstartFile) && unlink($quickstartFile)) {
-			touch($enableInstallToolFile);
-		}
-		// Additional security measure if ENABLE_INSTALL_TOOL file cannot, but
-		// should be deleted (in case it is write-protected, for example).
-		$removeInstallToolFileFailed = FALSE;
-		// Only allow Install Tool access if the file "typo3conf/ENABLE_INSTALL_TOOL" is found
-		if (is_file($enableInstallToolFile) && time() - filemtime($enableInstallToolFile) > 3600) {
-			$content = file_get_contents($enableInstallToolFile);
-			$verifyString = 'KEEP_FILE';
-			if (trim($content) !== $verifyString) {
-				// Delete the file if it is older than 3600s (1 hour)
-				if (!@unlink($enableInstallToolFile)) {
-					$removeInstallToolFileFailed = TRUE;
-				}
-			}
-		}
-		if (!is_file($enableInstallToolFile) || $removeInstallToolFileFailed) {
-			self::dieWithLockedInstallToolMessage();
-		}
-	}
-
-	/**
-	 * Exit the script with a message that the install tool is locked.
-	 *
-	 * @return void
-	 */
-	static protected function dieWithLockedInstallToolMessage() {
-		require_once PATH_site . 'typo3/sysext/core/Classes/Html/HtmlParser.php';
-		// Define the stylesheet
-		$stylesheet = '<link rel="stylesheet" type="text/css" href="' . '../stylesheets/install/install.css" />';
-		$javascript = '<script type="text/javascript" src="' . '../contrib/jquery/jquery-1.9.1.min.js"></script>';
-		$javascript .= '<script type="text/javascript" src="' . '../sysext/install/Resources/Public/Javascript/install.js"></script>';
-		// Get the template file
-		$template = @file_get_contents(PATH_site . 'typo3/sysext/install/Resources/Private/Templates/Notice.html');
-		// Define the markers content
-		$markers = array(
-			'styleSheet' => $stylesheet,
-			'javascript' => $javascript,
-			'title' => 'The Install Tool is locked',
-			'content' => '
-				<p>
-					To enable the Install Tool, the file ENABLE_INSTALL_TOOL must be created.
-				</p>
-				<ul>
-					<li>
-						In the typo3conf/ folder, create a file named ENABLE_INSTALL_TOOL. The file name is
-						case sensitive, but the file itself can simply be an empty file.
-					</li>
-					<li class="t3-install-locked-user-settings">
-						Alternatively, in the Backend, go to <a href="javascript:top.goToModule(\'tools_install\',1);">Admin tools &gt; Install</a>
-						and let TYPO3 create this file for you.<br />
-						You are recommended to log out from the Install Tool after finishing your work.
-						The file will then automatically be deleted.
-					</li>
-				</ul>
-				<p>
-					For security reasons, it is highly recommended that you either rename or delete the file after the operation is finished.
-				</p>
-				<p>
-					As an additional security measure, if the file is older than one hour, TYPO3 will automatically delete it. The file must be writable by the web server user.
-				</p>
-			'
-		);
-		// Fill the markers
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $markers, '###|###', 1, 1);
-		// Output the warning message and exit
-		header('Content-Type: text/html; charset=utf-8');
-		header('Cache-Control: no-cache, must-revalidate');
-		header('Pragma: no-cache');
-		echo $content;
-		die;
-	}
-
-}
-
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Installer.php b/typo3/sysext/install/Classes/Installer.php
deleted file mode 100644
index 44967d78da7d..000000000000
--- a/typo3/sysext/install/Classes/Installer.php
+++ /dev/null
@@ -1,6597 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install;
-
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 1999-2013 Kasper Skårhøj (kasperYYYY@typo3.com)
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Install Tool module
- *
- * @author 	Kasper Skårhøj <kasperYYYY@typo3.com>
- * @author 	Ingmar Schlecht <ingmar@typo3.org>
- */
-class Installer {
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $templateFilePath = 'typo3/sysext/install/Resources/Private/Templates/';
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $template;
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $javascript;
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $stylesheets;
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $markers = array();
-
-	/**
-	 * Used to set (error)messages from the executing functions like mail-sending, writing Localconf and such
-	 *
-	 * @var array
-	 */
-	protected $messages = array();
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $errorMessages = array();
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $mailMessage = '';
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $action = '';
-
-	// The url that calls this script
-	/**
-	 * @todo Define visibility
-	 */
-	public $scriptSelf = 'index.php';
-
-	// The url that calls this script
-	/**
-	 * @todo Define visibility
-	 */
-	public $updateIdentity = 'TYPO3 Install Tool';
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $headerStyle = '';
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $setAllCheckBoxesByDefault = 0;
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $allowFileEditOutsite_typo3conf_dir = 0;
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $INSTALL = array();
-
-	// In constructor: is set to global GET/POST var TYPO3_INSTALL
-	/**
-	 * @todo Define visibility
-	 */
-	public $checkIMlzw = 0;
-
-	// If set, lzw capabilities of the available ImageMagick installs are check by actually writing a gif-file and comparing size
-	/**
-	 * @todo Define visibility
-	 */
-	public $checkIM = 0;
-
-	// If set, ImageMagick is checked.
-	/**
-	 * @todo Define visibility
-	 */
-	public $dumpImCommands = 1;
-
-	// If set, the image Magick commands are always outputted in the image processing checker
-	/**
-	 * @todo Define visibility
-	 */
-	public $mode = '';
-
-	// If set to "123" then only most vital information is displayed.
-	/**
-	 * @todo Define visibility
-	 */
-	public $step = 0;
-
-	// If set to 1,2,3 or GO it signifies various functions.
-	/**
-	 * @todo Define visibility
-	 */
-	public $totalSteps = 4;
-
-	/**
-	 * @var boolean
-	 */
-	protected $hasAdditionalSteps = FALSE;
-
-	// Can be changed by hook to define the total steps in 123 mode
-	// internal
-	/**
-	 * @todo Define visibility
-	 */
-	public $passwordOK = 0;
-
-	// This is set, if the password check was ok. The function init() will exit if this is not set
-	/**
-	 * @todo Define visibility
-	 */
-	public $silent = 1;
-
-	// If set, the check routines don't add to the message-array
-	/**
-	 * @todo Define visibility
-	 */
-	public $sections = array();
-
-	// Used to gather the message information.
-	/**
-	 * @todo Define visibility
-	 */
-	public $fatalError = 0;
-
-	// This is set if some error occured that will definitely prevent TYpo3 from running.
-	/**
-	 * @todo Define visibility
-	 */
-	public $sendNoCacheHeaders = 1;
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $config_array = array(
-		// Flags are set in this array if the options are available and checked ok.
-		'dir_typo3temp' => 0,
-		'dir_temp' => 0,
-		'im_versions' => array(),
-		'im' => 0,
-		'sql.safe_mode_user' => '',
-		'mysqlConnect' => 0,
-		'no_database' => 0
-	);
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $typo3temp_path = '';
-
-	/**
-	 * the session handling object
-	 *
-	 * @var \TYPO3\CMS\Install\Session
-	 */
-	protected $session = NULL;
-
-	/**
-	 * the form protection instance used for creating and verifying form tokens
-	 *
-	 * @var \TYPO3\CMS\Core\FormProtection\InstallToolFormProtection
-	 */
-	protected $formProtection = NULL;
-
-	/**
-	 * @todo Define visibility
-	 */
-	public $menuitems = array(
-		'config' => 'Basic Configuration',
-		'systemEnvironment' => 'System environment',
-		'database' => 'Database Analyser',
-		'update' => 'Upgrade Wizard',
-		'images' => 'Image Processing',
-		'extConfig' => 'All Configuration',
-		'cleanup' => 'Clean up',
-		'phpinfo' => 'phpinfo()',
-		'typo3conf_edit' => 'Edit files in typo3conf/',
-		'about' => 'About',
-		'logout' => 'Logout from Install Tool'
-	);
-
-	/**
-	 * Backpath (used for icons etc.)
-	 *
-	 * @var string
-	 */
-	protected $backPath = '../';
-
-	/**
-	 * @var \TYPO3\CMS\Install\Sql\SchemaMigrator Instance of SQL handler
-	 */
-	protected $sqlHandler = NULL;
-
-	/**
-	 * Prefix for checkbox fields when updating database.
-	 *
-	 * @var string
-	 */
-	protected $dbUpdateCheckboxPrefix = 'TYPO3_INSTALL[database_update]';
-
-	/**
-	 * Constructor
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function __construct() {
-		$this->sqlHandler = GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\Sql\\SchemaMigrator');
-
-		if (!$GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword']) {
-			$this->outputErrorAndExit('Install Tool deactivated.<br />
-				You must enable it by setting a password in typo3conf/LocalConfiguration.php. If you insert the value below at array position \'BE\' \'installToolPassword\', the password will be \'joh316\':<br /><br />
-				\'bacb98acf97e0b6112b1d1b650b84971\'', 'Fatal error');
-		}
-		if ($this->sendNoCacheHeaders) {
-			header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
-			header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
-			header('Expires: 0');
-			header('Cache-Control: no-cache, must-revalidate');
-			header('Pragma: no-cache');
-		}
-		// ****************************
-		// Initializing incoming vars.
-		// ****************************
-		$this->INSTALL = GeneralUtility::_GP('TYPO3_INSTALL');
-		$this->mode = GeneralUtility::_GP('mode');
-		if ($this->mode !== '123') {
-			$this->mode = '';
-		}
-		if (GeneralUtility::_GP('step') === 'go') {
-			$this->step = 'go';
-		} else {
-			$this->step = intval(GeneralUtility::_GP('step'));
-		}
-
-		// Let DBAL decide whether to load itself - manual require since ext:dbal is not always loaded
-		$dbalLoaderFile = $this->backPath . 'sysext/dbal/Classes/Autoloader.php';
-		if (@is_file($dbalLoaderFile)) {
-			require_once $dbalLoaderFile;
-			$dbalAutoloader = GeneralUtility::makeInstance('TYPO3\\CMS\\Dbal\\Autoloader');
-			$dbalAutoloader->execute($this);
-		}
-
-		if ($this->mode === '123') {
-			// Check for mandatory PHP modules
-			$missingPhpModules = $this->getMissingPhpModules();
-			if (count($missingPhpModules) > 0) {
-				throw new \RuntimeException(
-					'TYPO3 Installation Error: The following PHP module(s) is/are missing: "' .
-						implode('", "', $missingPhpModules) .
-						'". You need to install and enable these modules first to be able to install TYPO3.',
-					1294587482);
-			}
-			// Load saltedpasswords if possible
-			$saltedpasswordsLoaderFile = $this->backPath . 'sysext/saltedpasswords/Classes/class.tx_saltedpasswords_autoloader.php';
-			if (@is_file($saltedpasswordsLoaderFile)) {
-				include $saltedpasswordsLoaderFile;
-			}
-		}
-		$this->redirect_url = GeneralUtility::sanitizeLocalUrl(GeneralUtility::_GP('redirect_url'));
-		$this->INSTALL['type'] = '';
-		if ($_GET['TYPO3_INSTALL']['type']) {
-			$allowedTypes = array(
-				'config',
-				'database',
-				'update',
-				'images',
-				'extConfig',
-				'cleanup',
-				'phpinfo',
-				'systemEnvironment',
-				'typo3conf_edit',
-				'about',
-				'logout'
-			);
-			if (in_array($_GET['TYPO3_INSTALL']['type'], $allowedTypes)) {
-				$this->INSTALL['type'] = $_GET['TYPO3_INSTALL']['type'];
-			}
-		}
-		if ($this->step == 4) {
-			$this->INSTALL['type'] = 'database';
-		}
-		// Hook to raise the counter for the total steps in the 1-2-3 installer
-		if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['additionalSteps'])) {
-			foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['additionalSteps'] as $classData) {
-				$hookObject = GeneralUtility::getUserObj($classData);
-				$additionalSteps = (int) $hookObject->executeAdditionalSteps($this);
-
-				if ($additionalSteps > 0) {
-					$this->hasAdditionalSteps = TRUE;
-				}
-
-				$this->totalSteps += $additionalSteps;
-			}
-		}
-		if ($this->mode == '123') {
-			$tempItems = $this->menuitems;
-			$this->menuitems = array(
-				'config' => $tempItems['config'],
-				'database' => $tempItems['database']
-			);
-			if (!$this->INSTALL['type'] || !isset($this->menuitems[$this->INSTALL['type']])) {
-				$this->INSTALL['type'] = 'config';
-			}
-		} else {
-			if (!$this->INSTALL['type'] || !isset($this->menuitems[$this->INSTALL['type']])) {
-				$this->INSTALL['type'] = 'about';
-			}
-		}
-		$this->action = $this->scriptSelf . '?TYPO3_INSTALL[type]=' . $this->INSTALL['type'] . ($this->mode ? '&mode=' . $this->mode : '') . ($this->step ? '&step=' . $this->step : '');
-		$this->typo3temp_path = PATH_site . 'typo3temp/';
-		if (!is_dir($this->typo3temp_path) || !is_writeable($this->typo3temp_path)) {
-			$this->outputErrorAndExit('Install Tool needs to write to typo3temp/. Make sure this directory is writeable by your webserver: ' . htmlspecialchars($this->typo3temp_path), 'Fatal error');
-		}
-		try {
-			$this->session = GeneralUtility::makeInstance('tx_install_session');
-		} catch (\Exception $exception) {
-			$this->outputErrorAndExit($exception->getMessage());
-		}
-		// *******************
-		// Check authorization
-		// *******************
-		if (!$this->session->hasSession()) {
-			$this->session->startSession();
-		}
-		if ($this->session->isAuthorized() || $this->checkPassword()) {
-			$this->passwordOK = 1;
-			$this->session->refreshSession();
-			$enableInstallToolFile = PATH_typo3conf . 'ENABLE_INSTALL_TOOL';
-			if (is_file($enableInstallToolFile)) {
-				// Extend the age of the ENABLE_INSTALL_TOOL file by one hour
-				@touch($enableInstallToolFile);
-			}
-			if ($this->redirect_url) {
-				\TYPO3\CMS\Core\Utility\HttpUtility::redirect($this->redirect_url);
-			}
-			$this->formProtection = \TYPO3\CMS\Core\FormProtection\FormProtectionFactory::get('TYPO3\\CMS\\Core\\FormProtection\\InstallToolFormProtection');
-			$this->formProtection->injectInstallTool($this);
-		} else {
-			$this->loginForm();
-		}
-	}
-
-	/**
-	 * Returns TRUE if submitted password is ok.
-	 *
-	 * If password is ok, set session as "authorized".
-	 *
-	 * @return boolean TRUE if the submitted password was ok and session was
-	 * @todo Define visibility
-	 */
-	public function checkPassword() {
-		$p = GeneralUtility::_GP('password');
-		if ($p && md5($p) === $GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword']) {
-			$this->session->setAuthorized();
-			// Sending warning email
-			$wEmail = $GLOBALS['TYPO3_CONF_VARS']['BE']['warning_email_addr'];
-			if ($wEmail) {
-				$subject = 'Install Tool Login at "' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . '"';
-				$email_body = 'There has been an Install Tool login at TYPO3 site "' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . '" (' . GeneralUtility::getIndpEnv('HTTP_HOST') . ') from remote address "' . GeneralUtility::getIndpEnv('REMOTE_ADDR') . '" (' . GeneralUtility::getIndpEnv('REMOTE_HOST') . ')';
-				mail($wEmail, $subject, $email_body, 'From: TYPO3 Install Tool WARNING <>');
-			}
-			return TRUE;
-		} else {
-			// Bad password, send warning:
-			if ($p) {
-				$wEmail = $GLOBALS['TYPO3_CONF_VARS']['BE']['warning_email_addr'];
-				if ($wEmail) {
-					$subject = 'Install Tool Login ATTEMPT at \'' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . '\'';
-					$email_body = 'There has been an Install Tool login attempt at TYPO3 site \'' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . '\' (' . GeneralUtility::getIndpEnv('HTTP_HOST') . ').
-The MD5 hash of the last 5 characters of the password tried was \'' . substr(md5($p), -5) . '\'
-REMOTE_ADDR was \'' . GeneralUtility::getIndpEnv('REMOTE_ADDR') . '\' (' . GeneralUtility::getIndpEnv('REMOTE_HOST') . ')';
-					mail($wEmail, $subject, $email_body, 'From: TYPO3 Install Tool WARNING <>');
-				}
-			}
-			return FALSE;
-		}
-	}
-
-	/**
-	 * Create the HTML for the login form
-	 *
-	 * Reads and fills the template.
-	 * Substitutes subparts when wrong password has been given
-	 * or the session has expired
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function loginForm() {
-		$password = GeneralUtility::_GP('password');
-		$redirect_url = $this->redirect_url ? $this->redirect_url : $this->action;
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'LoginForm.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Password has been given, but this form is rendered again.
-		// This means the given password was wrong
-		if (!empty($password)) {
-			// Get the subpart for the wrong password
-			$wrongPasswordSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###WRONGPASSWORD###');
-			// Define the markers content
-			$wrongPasswordMarkers = array(
-				'passwordMessage' => 'The password you just tried has this md5-value:',
-				'password' => md5($password)
-			);
-			// Fill the markers in the subpart
-			$wrongPasswordSubPart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($wrongPasswordSubPart, $wrongPasswordMarkers, '###|###', TRUE, TRUE);
-		}
-		// Session has expired
-		if (!$this->session->isAuthorized() && $this->session->isExpired()) {
-			// Get the subpart for the expired session message
-			$sessionExpiredSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###SESSIONEXPIRED###');
-			// Define the markers content
-			$sessionExpiredMarkers = array(
-				'message' => 'Your Install Tool session has expired'
-			);
-			// Fill the markers in the subpart
-			$sessionExpiredSubPart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($sessionExpiredSubPart, $sessionExpiredMarkers, '###|###', TRUE, TRUE);
-		}
-		// Substitute the subpart for the expired session in the template
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###SESSIONEXPIRED###', $sessionExpiredSubPart);
-		// Substitute the subpart for the wrong password in the template
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###WRONGPASSWORD###', $wrongPasswordSubPart);
-		// Define the markers content
-		$markers = array(
-			'siteName' => 'Site: ' . htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']),
-			'headTitle' => 'Login to TYPO3 ' . TYPO3_version . ' Install Tool',
-			'redirectUrl' => htmlspecialchars($redirect_url),
-			'enterPassword' => 'Password',
-			'login' => 'Login',
-			'message' => '
-				<p class="typo3-message message-information">
-					The Install Tool Password is <em>not</em> the admin password
-					of TYPO3.
-					<br />
-					The default password is <em>joh316</em>. Be sure to change it!
-					<br /><br />
-					If you don\'t know the current password, you can set a new
-					one by setting the value of
-					$TYPO3_CONF_VARS[\'BE\'][\'installToolPassword\'] in
-					typo3conf/LocalConfiguration.php to the md5() hash value of the
-					password you desire.
-				</p>
-			'
-		);
-		// Fill the markers in the template
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $markers, '###|###', TRUE, TRUE);
-		// Send content to the page wrapper function
-		$this->output($this->outputWrapper($content));
-	}
-
-	/**
-	 * Calling function that checks system, IM, GD, dirs, database
-	 * and lets you alter localconf.php
-	 *
-	 * This method is called from init.php to start the Install Tool.
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function init() {
-		// Must be called after inclusion of init.php (or from init.php)
-		if (!defined('PATH_typo3')) {
-			die;
-		}
-		if (!$this->passwordOK) {
-			die;
-		}
-		// Setting stuff...
-		$this->check_mail();
-		$this->setupGeneral();
-		$this->generateConfigForm();
-		if (count($this->messages)) {
-			\TYPO3\CMS\Core\Utility\DebugUtility::debug($this->messages);
-		}
-		if ($this->step) {
-			$this->output($this->outputWrapper($this->stepOutput()));
-		} else {
-			// Menu...
-			switch ($this->INSTALL['type']) {
-			case 'images':
-				$this->checkIM = 1;
-				$this->checkTheConfig();
-				$this->silent = 0;
-				$this->checkTheImageProcessing();
-				break;
-			case 'database':
-				$this->checkTheConfig();
-				$this->silent = 0;
-				$this->checkTheDatabase();
-				break;
-			case 'update':
-				$this->checkDatabase();
-				$this->silent = 0;
-				$this->updateWizard();
-				break;
-			case 'config':
-				$this->silent = 0;
-				$this->checkIM = 1;
-				$this->message('About configuration', 'How to configure TYPO3', $this->generallyAboutConfiguration());
-				$isPhpCgi = PHP_SAPI == 'fpm-fcgi' || PHP_SAPI == 'cgi' || PHP_SAPI == 'isapi' || PHP_SAPI == 'cgi-fcgi';
-				$this->message('System Information', 'Your system has the following configuration', '
-							<dl id="systemInformation">
-								<dt>OS detected:</dt>
-								<dd>' . (TYPO3_OS == 'WIN' ? 'WIN' : 'UNIX') . '</dd>
-								<dt>CGI detected:</dt>
-								<dd>' . ($isPhpCgi ? 'YES' : 'NO') . '</dd>
-								<dt>PATH_thisScript:</dt>
-								<dd>' . PATH_thisScript . '</dd>
-							</dl>
-						');
-				$this->checkTheConfig();
-				$ext = 'Write configuration';
-				if ($this->fatalError) {
-					if ($this->config_array['no_database'] || !$this->config_array['mysqlConnect']) {
-						$this->message($ext, 'Database not configured yet!', '
-								<p>
-									You need to specify database username,
-									password and host as one of the first things.
-									<br />
-									Next you\'ll have to select a database to
-									use with TYPO3.
-								</p>
-								<p>
-									Use the form below.
-								</p>
-							', 2);
-					} else {
-						$this->message($ext, 'Fatal error encountered!', '
-								<p>
-									Somewhere above a fatal configuration
-									problem is encountered.
-									Please make sure that you\'ve fixed this
-									error before you submit the configuration.
-									TYPO3 will not run if this problem is not
-									fixed!
-									<br />
-									You should also check all warnings that may
-									appear.
-								</p>
-							', 2);
-					}
-				} elseif ($this->mode == '123') {
-					if (!$this->fatalError) {
-						$this->message($ext, 'Basic configuration completed', '
-								<p>
-									You have no fatal errors in your basic
-									configuration.
-									You may have warnings though. Please pay
-									attention to them!
-									However you may continue and install the
-									database.
-								</p>
-								<p>
-									<strong>
-										<span style="color:#f00;">Step 2: </span>
-									</strong>
-									<a href="' . $this->scriptSelf . '?TYPO3_INSTALL[type]=database' . ($this->mode ? '&mode=' . rawurlencode($this->mode) : '') . '">Click here to install the database.</a>
-								</p>
-							', -1, 1);
-					}
-				}
-				$this->message($ext, 'Very Important: Changing Image Processing settings', '
-						<p>
-							When you change the settings for Image Processing
-							you <em>must</em> take into account
-							that <em>old images</em> may still be in typo3temp/
-							folder and prevent new files from being generated!
-							<br />
-							This is especially important to know, if you\'re
-							trying to set up image processing for the very first
-							time.
-							<br />
-							The problem is solved by <a href="' . htmlspecialchars($this->setScriptName('cleanup')) . '">clearing the typo3temp/ folder</a>.
-							Also make sure to clear the cache_pages table.
-						</p>
-					', 1, 1);
-				$this->message($ext, 'Very Important: Changing Encryption Key setting', '
-						<p>
-							When you change the setting for the Encryption Key
-							you <em>must</em> take into account that a change to
-							this value might invalidate temporary information,
-							URLs etc.
-							<br />
-							The problem is solved by <a href="' . htmlspecialchars($this->setScriptName('cleanup')) . '">clearing the typo3temp/ folder</a>.
-							Also make sure to clear the cache_pages table.
-						</p>
-					', 1, 1);
-				$this->message($ext, 'Update configuration', '
-						<p>
-							This form updates the configuration with the
-							suggested values you see below. The values are based
-							on the analysis above.
-							<br />
-							You can change the values in case you have
-							alternatives to the suggested defaults.
-							<br />
-							By this final step you will configure TYPO3 for
-							immediate use provided that you have no fatal errors
-							left above.
-						</p>' . $this->setupGeneral('get_form') . '
-					', 0, 1);
-				$this->output($this->outputWrapper($this->printAll()));
-				break;
-			case 'extConfig':
-				$this->silent = 0;
-				$this->generateConfigForm('get_form');
-				// Get the template file
-				$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'InitExtConfig.html'));
-				// Get the template part from the file
-				$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-				// Define the markers content
-				$markers = array(
-					'action' => $this->action,
-					'content' => $this->printAll(),
-					'write' => 'Write configuration',
-					'notice' => 'NOTICE:',
-					'explanation' => '
-							By clicking this button, the configuration is updated
-							with new values for the parameters listed above!
-						'
-				);
-				// Fill the markers in the template
-				$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $markers, '###|###', TRUE, FALSE);
-				// Send content to the page wrapper function
-				$this->output($this->outputWrapper($content));
-				break;
-			case 'cleanup':
-				$this->checkTheConfig();
-				$this->silent = 0;
-				$this->cleanupManager();
-				break;
-			case 'phpinfo':
-				$this->silent = 0;
-				$this->phpinformation();
-				break;
-			case 'systemEnvironment':
-				$this->silent = 0;
-				$this->systemEnvironmentCheck();
-				break;
-			case 'typo3conf_edit':
-				$this->silent = 0;
-				$this->typo3conf_edit();
-				break;
-			case 'logout':
-				$enableInstallToolFile = PATH_site . 'typo3conf/ENABLE_INSTALL_TOOL';
-				if (is_file($enableInstallToolFile) && trim(file_get_contents($enableInstallToolFile)) !== 'KEEP_FILE') {
-					unlink(PATH_typo3conf . 'ENABLE_INSTALL_TOOL');
-				}
-				$this->formProtection->clean();
-				$this->session->destroySession();
-				\TYPO3\CMS\Core\Utility\HttpUtility::redirect($this->scriptSelf);
-				break;
-			case 'about':
-
-			default:
-				$this->silent = 0;
-				$this->message('About', 'Warning - very important!', $this->securityRisk() . $this->alterPasswordForm(), 2);
-				$this->message('About', 'Using this script', '
-						<p>
-							There are three primary steps for you to take:
-						</p>
-						<p>
-							<strong>1: Basic Configuration</strong>
-							<br />
-							In this step your PHP-configuration is checked. If
-							there are any settings that will prevent TYPO3 from
-							running correctly you\'ll get warnings and errors
-							with a description of the problem.
-							<br />
-							You\'ll have to enter a database username, password
-							and hostname. Then you can choose to create a new
-							database or select an existing one.
-							<br />
-							Finally the image processing settings are entered
-							and verified and you can choose to let the script
-							update the configuration with the suggested settings.
-						</p>
-						<p>
-							<strong>2: Database Analyser</strong>
-							<br />
-							In this step you can either install a new database
-							or update the database from any previous TYPO3
-							version.
-							<br />
-							You can also get an overview of extra/missing
-							fields/tables in the database compared to a raw
-							sql-file.
-							<br />
-							The database is also verified against your
-							configuration ($TCA) and you can
-							even see suggestions to entries in $TCA or new
-							fields in the database.
-						</p>
-						<p>
-							<strong>3: Upgrade Wizard</strong>
-							<br />
-							Here you will find update methods taking care of
-							changes to the TYPO3 core which are not backwards
-							compatible.
-							<br />
-							It is recommended to run this wizard after every
-							update to make sure everything will still work
-							flawlessly.
-						</p>
-						<p>
-							<strong>4: Image Processing</strong>
-							<br />
-							This step is a visual guide to verify your
-							configuration of the image processing software.
-							<br />
-							You\'ll be presented to a list of images that should
-							all match in pairs. If some irregularity appears,
-							you\'ll get a warning. Thus you\'re able to track an
-							error before you\'ll discover it on your website.
-						</p>
-						<p>
-							<strong>5: All Configuration</strong>
-							<br />
-							This gives you access to any of the configuration
-							options in the TYPO3_CONF_VARS array. Every option
-							is also presented with a comment explaining what it
-							does.
-						</p>
-						<p>
-							<strong>6: Cleanup</strong>
-							<br />
-							Here you can clean up the temporary files in typo3temp/
-							folder and the tables used for caching of data in
-							your database.
-						</p>
-					');
-
-				$headCode = 'Header legend';
-				$this->message($headCode, 'Notice!', '
-						<p>
-							Indicates that something is important to be aware
-							of.
-							<br />
-							This does <em>not</em> indicate an error.
-						</p>
-					', 1);
-				$this->message($headCode, 'Just information', '
-						<p>
-							This is a simple message with some information about
-							something.
-						</p>
-					');
-				$this->message($headCode, 'Check was successful', '
-						<p>
-							Indicates that something was checked and returned an
-							expected result.
-						</p>
-					', -1);
-				$this->message($headCode, 'Warning!', '
-						<p>
-							Indicates that something may very well cause trouble
-							and you should definitely look into it before
-							proceeding.
-							<br />
-							This indicates a <em>potential</em> error.
-						</p>
-					', 2);
-				$this->message($headCode, 'Error!', '
-						<p>
-							Indicates that something is definitely wrong and
-							that TYPO3 will most likely not perform as expected
-							if this problem is not solved.
-							<br />
-							This indicates an actual error.
-						</p>
-					', 3);
-				$this->output($this->outputWrapper($this->printAll()));
-				break;
-			}
-		}
-	}
-
-	/**
-	 * Controls the step 1-2-3-go process
-	 *
-	 * @return string The content to output to the screen
-	 * @todo Define visibility
-	 */
-	public function stepOutput() {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'StepOutput.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Define the markers content
-		$markers = array(
-			'stepHeader' => $this->stepHeader(),
-			'notice' => 'Skip this wizard (for power users only)',
-			'skip123' => $this->scriptSelf
-		);
-		$this->checkTheConfig();
-		$error_missingConnect = '
-			<p class="typo3-message message-error">
-				<strong>
-					There is no connection to the database!
-				</strong>
-				<br />
-				(Username: <em>' . htmlspecialchars(TYPO3_db_username) . '</em>,
-				Host: <em>' . htmlspecialchars(TYPO3_db_host) . '</em>,
-				Using Password: YES)
-				<br />
-				Go to Step 1 and enter a valid username and password!
-			</p>
-		';
-		$error_missingDB = '
-			<p class="typo3-message message-error">
-				<strong>
-					There is no access to the database (<em>' . htmlspecialchars(TYPO3_db) . '</em>)!
-				</strong>
-				<br />
-				Go to Step 2 and select a valid database!
-			</p>
-		';
-		// only get the number of tables if it is not the first two steps in the 123-installer
-		// (= no DB connection yet) or connect failed
-		$whichTables = $this->step != 1 && $this->step != 2 && $this->fatalError !== 1
-			? $this->sqlHandler->getListOfTables() : array();
-
-		$error_emptyDB = '
-			<p class="typo3-message message-error">
-				<strong>
-					The database is still empty. There are no tables!
-				</strong>
-				<br />
-				Go to Step 3 and import a database!
-			</p>
-		';
-		// Hook to override and add steps to the 1-2-3 installer
-		if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['stepOutput'])) {
-			foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['stepOutput'] as $classData) {
-				$hookObject = GeneralUtility::getUserObj($classData);
-				$hookObject->executeStepOutput($markers, $this->step, $this);
-			}
-		}
-		// Use the default steps when there is no override
-		if (!$markers['header'] && !$markers['step']) {
-			switch (strtolower($this->step)) {
-			case 1:
-				// Get the subpart for the first step
-				$step1SubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###STEP1###');
-				// Add header marker for main template
-				$markers['header'] = 'Welcome to the TYPO3 Install Tool';
-				// Define the markers content for the subpart
-				$step1SubPartMarkers = array(
-					'llIntroduction' => '
-							<p>
-								TYPO3 is an enterprise content management system
-								that is powerful, yet easy to install.
-							</p>
-							<p>
-								In three simple steps you\'ll be ready to add content to your website.
-							</p>
-						',
-					'step' => $this->step + 1,
-					'action' => htmlspecialchars($this->action),
-					'continue' => 'Continue'
-				);
-				// Add step marker for main template
-				$markers['step'] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($step1SubPart, $step1SubPartMarkers, '###|###', TRUE, FALSE);
-				break;
-			case 2:
-				// Get the subpart for the second step
-				$step2SubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###STEP2###');
-				// Add header marker for main template
-				$markers['header'] = 'Connect to your database host';
-				// Define the markers content for the subpart
-				$step2SubPartMarkers = array(
-					'step' => $this->step + 1,
-					'action' => htmlspecialchars($this->action),
-					'encryptionKey' => $this->createEncryptionKey(),
-					'branch' => TYPO3_branch,
-					'labelUsername' => 'Username',
-					'username' => htmlspecialchars(TYPO3_db_username),
-					'labelPassword' => 'Password',
-					'password' => htmlspecialchars(TYPO3_db_password),
-					'labelHost' => 'Host',
-					'host' => TYPO3_db_host ? htmlspecialchars(TYPO3_db_host) : 'localhost',
-					'continue' => 'Continue',
-					'llDescription' => 'If you have not already created a username and password to access the database, please do so now. This can be done using tools provided by your host.'
-				);
-				// Add step marker for main template
-				$markers['step'] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($step2SubPart, $step2SubPartMarkers, '###|###', TRUE, FALSE);
-				break;
-			case 3:
-				// Add header marker for main template
-				$markers['header'] = 'Select database';
-				// There should be a database host connection at this point
-				if ($result = $GLOBALS['TYPO3_DB']->sql_pconnect()) {
-					// Get the subpart for the third step
-					$step3SubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###STEP3###');
-					// Get the subpart for the database options
-					$step3DatabaseOptionsSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($step3SubPart, '###DATABASEOPTIONS###');
-					$dbArr = $this->getDatabaseList();
-					$dbIncluded = 0;
-					$step3DatabaseOptions = array();
-					foreach ($dbArr as $dbname) {
-						// Define the markers content for database options
-						$step3DatabaseOptionMarkers = array(
-							'databaseValue' => htmlspecialchars($dbname),
-							'databaseSelected' => $dbname == TYPO3_db ? 'selected="selected"' : '',
-							'databaseName' => htmlspecialchars($dbname)
-						);
-						// Add the option HTML to an array
-						$step3DatabaseOptions[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($step3DatabaseOptionsSubPart, $step3DatabaseOptionMarkers, '###|###', TRUE, TRUE);
-						if ($dbname == TYPO3_db) {
-							$dbIncluded = 1;
-						}
-					}
-					if (!$dbIncluded && TYPO3_db) {
-						// // Define the markers content when no access
-						$step3DatabaseOptionMarkers = array(
-							'databaseValue' => htmlspecialchars(TYPO3_db),
-							'databaseSelected' => 'selected="selected"',
-							'databaseName' => htmlspecialchars(TYPO3_db) . ' (NO ACCESS!)'
-						);
-						// Add the option HTML to an array
-						$step3DatabaseOptions[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($step3DatabaseOptionsSubPart, $step3DatabaseOptionMarkers, '###|###', TRUE, TRUE);
-					}
-					$usePatternList = FALSE;
-					$createDatabaseAllowed = $this->checkCreateDatabasePrivileges();
-					if ($createDatabaseAllowed === TRUE) {
-						$formFieldAttributesNew = 'checked="checked"';
-						$llRemark1 = 'Enter a name for your TYPO3 database.';
-					} elseif (is_array($createDatabaseAllowed)) {
-						$llRemark1 = 'Enter a name for your TYPO3 database.';
-						$llDbPatternRemark = 'The name has to match one of these names/patterns (% is a wild card):';
-						$llDbPatternList = '<li>' . implode('</li><li>', $createDatabaseAllowed) . '</li>';
-						$usePatternList = TRUE;
-					} else {
-						$formFieldAttributesNew = 'disabled="disabled"';
-						$formFieldAttributesSelect = 'checked="checked"';
-						$llRemark1 = 'You have no permissions to create new databases.';
-					}
-					// Substitute the subpart for the database options
-					$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($step3SubPart, '###DATABASEOPTIONS###', implode(LF, $step3DatabaseOptions));
-					if ($usePatternList === FALSE) {
-						$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###DATABASE_NAME_PATTERNS###', '');
-					}
-					// Define the markers content
-					$step3SubPartMarkers = array(
-						'step' => $this->step + 1,
-						'llOptions' => 'You have two options:',
-						'action' => htmlspecialchars($this->action),
-						'llOption1' => 'Create a new database (recommended):',
-						'llRemark1' => $llRemark1,
-						'll_Db_Pattern_Remark' => $llDbPatternRemark,
-						'll_Db_Pattern_List' => $llDbPatternList,
-						'formFieldAttributesNew' => $formFieldAttributesNew,
-						'formFieldAttributesSelect' => $formFieldAttributesSelect,
-						'llOption2' => 'Select an EMPTY existing database:',
-						'llRemark2' => 'Any tables used by TYPO3 will be overwritten.',
-						'continue' => 'Continue'
-					);
-					// Add step marker for main template
-					$markers['step'] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $step3SubPartMarkers, '###|###', TRUE, TRUE);
-				} else {
-					// Add step marker for main template when no connection
-					$markers['step'] = $error_missingConnect;
-				}
-				break;
-			case 4:
-				// Add header marker for main template
-				$markers['header'] = 'Import the Database Tables';
-				// There should be a database host connection at this point
-				if ($result = $GLOBALS['TYPO3_DB']->sql_pconnect()) {
-					// The selected database should be accessible
-					if ($GLOBALS['TYPO3_DB']->sql_select_db()) {
-						// Get the subpart for the fourth step
-						$step4SubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###STEP4###');
-						// Get the subpart for the database type options
-						$step4DatabaseTypeOptionsSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($step4SubPart, '###DATABASETYPEOPTIONS###');
-						$sFiles = GeneralUtility::getFilesInDir(PATH_typo3conf, 'sql', 1, 1);
-						// Check if default database scheme "database.sql" already exists, otherwise create it
-						if (!strstr((implode(',', $sFiles) . ','), '/database.sql,')) {
-							array_unshift($sFiles, 'Default TYPO3 Tables');
-						}
-						$step4DatabaseTypeOptions = array();
-						foreach ($sFiles as $f) {
-							if ($f == 'Default TYPO3 Tables') {
-								$key = 'CURRENT_TABLES+STATIC';
-							} else {
-								$key = htmlspecialchars($f);
-							}
-							// Define the markers content for database type subpart
-							$step4DatabaseTypeOptionMarkers = array(
-								'databaseTypeValue' => 'import|' . $key,
-								'databaseName' => htmlspecialchars(basename($f))
-							);
-							// Add the option HTML to an array
-							$step4DatabaseTypeOptions[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($step4DatabaseTypeOptionsSubPart, $step4DatabaseTypeOptionMarkers, '###|###', TRUE, FALSE);
-						}
-						// Substitute the subpart for the database type options
-						$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($step4SubPart, '###DATABASETYPEOPTIONS###', implode(LF, $step4DatabaseTypeOptions));
-						// Define the markers content
-						$step4SubPartMarkers = array(
-							'llSummary' => 'Database summary:',
-							'llUsername' => 'Username:',
-							'username' => htmlspecialchars(TYPO3_db_username),
-							'llHost' => 'Host:',
-							'host' => htmlspecialchars(TYPO3_db_host),
-							'llDatabase' => 'Database:',
-							'database' => htmlspecialchars(TYPO3_db),
-							'llNumberTables' => 'Number of tables:',
-							'numberTables' => count($whichTables),
-							'action' => htmlspecialchars($this->action),
-							'llDatabaseType' => 'Select database contents:',
-							'label' => 'Import database'
-						);
-						// Add step marker for main template
-						$markers['step'] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $step4SubPartMarkers, '###|###', TRUE, TRUE);
-					} else {
-						// Add step marker for main template when no database
-						$markers['step'] = $error_missingDB;
-					}
-				} else {
-					// Add step marker for main template when no connection
-					$markers['step'] = $error_missingConnect;
-				}
-				break;
-			case 'go':
-				// Add header marker for main template
-				$markers['header'] = 'Congratulations!';
-				// There should be a database host connection at this point
-				if ($result = $GLOBALS['TYPO3_DB']->sql_pconnect()) {
-					// The selected database should be accessible
-					if ($GLOBALS['TYPO3_DB']->sql_select_db()) {
-						// The database should contain tables
-						if (count($whichTables)) {
-							// Get the subpart for the go step
-							$stepGoSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###STEPGO###');
-							// Define the markers content
-							$stepGoSubPartMarkers = array(
-								'messageBasicFinished' => $this->messageBasicFinished(),
-								'llImportant' => 'Important Security Warning',
-								'securityRisk' => $this->securityRisk(),
-								'llSwitchMode' => '
-										<a href="' . $this->scriptSelf . '">
-											Change the Install Tool password here
-										</a>
-									'
-							);
-							// Add step marker for main template
-							$markers['step'] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($stepGoSubPart, $stepGoSubPartMarkers, '###|###', TRUE, TRUE);
-						} else {
-							// Add step marker for main template when empty database
-							$markers['step'] = $error_emptyDB;
-						}
-					} else {
-						// Add step marker for main template when no database
-						$markers['step'] = $error_missingDB;
-					}
-				} else {
-					// Add step marker for main template when no connection
-					$markers['step'] = $error_missingConnect;
-				}
-				break;
-			}
-		}
-		// Fill the markers in the template
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $markers, '###|###', TRUE, FALSE);
-		return $content;
-	}
-
-	/**
-	 * Calling the functions that checks the system
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function checkTheConfig() {
-		// Order important:
-		$this->checkDirs();
-		$this->checkConfiguration();
-		$this->checkExtensions();
-		if (TYPO3_OS == 'WIN') {
-			$paths = array($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path_lzw'], $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path'], 'c:\\php\\imagemagick\\', 'c:\\php\\GraphicsMagick\\', 'c:\\apache\\ImageMagick\\', 'c:\\apache\\GraphicsMagick\\');
-			if (!isset($_SERVER['PATH'])) {
-				$serverPath = array_change_key_case($_SERVER, CASE_UPPER);
-				$paths = array_merge($paths, explode(';', $serverPath['PATH']));
-			} else {
-				$paths = array_merge($paths, explode(';', $_SERVER['PATH']));
-			}
-		} else {
-			$paths = array($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path_lzw'], $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path'], '/usr/local/bin/', '/usr/bin/', '/usr/X11R6/bin/', '/opt/local/bin/');
-			$paths = array_merge($paths, explode(':', $_SERVER['PATH']));
-		}
-		$paths = array_unique($paths);
-		asort($paths);
-		if ($this->INSTALL['checkIM']['lzw']) {
-			$this->checkIMlzw = 1;
-		}
-		if ($this->INSTALL['checkIM']['path']) {
-			$paths[] = trim($this->INSTALL['checkIM']['path']);
-		}
-		if ($this->checkIM) {
-			$this->checkImageMagick($paths);
-		}
-		$this->checkDatabase();
-	}
-
-	/**
-	 * Editing files in typo3conf directory (or elsewhere if enabled)
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function typo3conf_edit() {
-		// default:
-		$EDIT_path = PATH_typo3conf;
-		if ($this->allowFileEditOutsite_typo3conf_dir && $this->INSTALL['FILE']['EDIT_path']) {
-			if (GeneralUtility::validPathStr($this->INSTALL['FILE']['EDIT_path']) && substr($this->INSTALL['FILE']['EDIT_path'], -1) == '/') {
-				$tmp_path = PATH_site . $this->INSTALL['FILE']['EDIT_path'];
-				if (is_dir($tmp_path)) {
-					$EDIT_path = $tmp_path;
-				} else {
-					$this->errorMessages[] = '
-						\'' . $tmp_path . '\' was not directory
-					';
-				}
-			} else {
-				$this->errorMessages[] = '
-					Bad directory name (must be like typo3/)
-				';
-			}
-		}
-		$headCode = 'Edit files in ' . basename($EDIT_path) . '/';
-		$messages = '';
-		if ($this->INSTALL['SAVE_FILE']) {
-			$save_to_file = $this->INSTALL['FILE']['name'];
-			if (@is_file($save_to_file)) {
-				$save_to_file_md5 = md5($save_to_file);
-				if (isset($this->INSTALL['FILE'][$save_to_file_md5]) && GeneralUtility::isFirstPartOfStr($save_to_file, $EDIT_path . '') && substr($save_to_file, -1) != '~' && !strstr($save_to_file, '_bak')) {
-					$this->INSTALL['typo3conf_files'] = $save_to_file;
-					$save_fileContent = $this->INSTALL['FILE'][$save_to_file_md5];
-					if ($this->INSTALL['FILE']['win_to_unix_br']) {
-						$save_fileContent = str_replace(CRLF, LF, $save_fileContent);
-					}
-					$backupFile = $this->getBackupFilename($save_to_file);
-					if ($this->INSTALL['FILE']['backup']) {
-						if (@is_file($backupFile)) {
-							unlink($backupFile);
-						}
-						rename($save_to_file, $backupFile);
-						$messages .= '
-							Backup written to <strong>' . $backupFile . '</strong>
-							<br />
-						';
-					}
-					GeneralUtility::writeFile($save_to_file, $save_fileContent);
-					$messages .= '
-						File saved: <strong>' . $save_to_file . '</strong>
-						<br />
-						MD5-sum: ' . $this->INSTALL['FILE']['prevMD5'] . ' (prev)
-						<br />
-						MD5-sum: ' . md5($save_fileContent) . ' (new)
-						<br />
-					';
-				}
-			}
-		}
-		// Filelist:
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'Typo3ConfEdit.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Get the subpart for the files
-		$filesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###FILES###');
-		$files = array();
-		$typo3conf_files = GeneralUtility::getFilesInDir($EDIT_path, '', 1, 1);
-		$fileFound = 0;
-		foreach ($typo3conf_files as $k => $file) {
-			// Delete temp_CACHED files if option is set
-			if ($this->INSTALL['delTempCached'] && preg_match('|/temp_CACHED_[a-z0-9_]+\\.php|', $file)) {
-				unlink($file);
-				continue;
-			}
-			if ($this->INSTALL['typo3conf_files'] && !strcmp($this->INSTALL['typo3conf_files'], $file)) {
-				$fileFound = 1;
-			}
-			// Define the markers content for the files subpart
-			$filesMarkers = array(
-				'editUrl' => $this->action . '&amp;TYPO3_INSTALL[typo3conf_files]=' . rawurlencode($file) . ($this->allowFileEditOutsite_typo3conf_dir ? '&amp;TYPO3_INSTALL[FILE][EDIT_path]=' . rawurlencode($this->INSTALL['FILE']['EDIT_path']) : '') . '#confEditFileList',
-				'fileName' => basename($file),
-				'fileSize' => GeneralUtility::formatSize(filesize($file)),
-				'class' => $this->INSTALL['typo3conf_files'] && !strcmp($this->INSTALL['typo3conf_files'], $file) ? 'class="act"' : ''
-			);
-			// Fill the markers in the subpart
-			$files[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($filesSubpart, $filesMarkers, '###|###', TRUE, FALSE);
-		}
-		if ($fileFound && @is_file($this->INSTALL['typo3conf_files'])) {
-			$backupFile = $this->getBackupFilename($this->INSTALL['typo3conf_files']);
-			$fileContent = GeneralUtility::getUrl($this->INSTALL['typo3conf_files']);
-			// Get the subpart to edit the files
-			$fileEditTemplate = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###FILEEDIT###');
-			$allowFileEditOutsideTypo3ConfDirSubPart = '';
-			if (substr($this->INSTALL['typo3conf_files'], -1) != '~' && !strstr($this->INSTALL['typo3conf_files'], '_bak')) {
-				// Get the subpart to show the save button
-				$showSaveButtonSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($fileEditTemplate, '###SHOWSAVEBUTTON###');
-			}
-			if ($this->allowFileEditOutsite_typo3conf_dir) {
-				// Get the subpart to show if files are allowed outside the directory typo3conf
-				$allowFileEditOutsideTypo3ConfDirSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($fileEditTemplate, '###ALLOWFILEEDITOUTSIDETYPO3CONFDIR###');
-			}
-			// Substitute the subpart for the save button
-			$fileEditContent = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($fileEditTemplate, '###SHOWSAVEBUTTON###', $showSaveButtonSubPart);
-			// Substitute the subpart to show if files are allowed outside the directory typo3conf
-			$fileEditContent = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($fileEditContent, '###ALLOWFILEEDITOUTSIDETYPO3CONFDIR###', $allowFileEditOutsideTypo3ConfDirSubPart);
-			// Define the markers content for subpart to edit the files
-			$fileEditMarkers = array(
-				'messages' => !empty($messages) ? '<p class="typo3-message message-warning">' . $messages . '</p>' : '',
-				'action' => $this->action . '#fileEditHeader',
-				'saveFile' => 'Save file',
-				'close' => 'Close',
-				'llEditing' => 'Editing file:',
-				'file' => $this->INSTALL['typo3conf_files'],
-				'md5Sum' => 'MD5-sum: ' . md5($fileContent),
-				'fileName' => $this->INSTALL['typo3conf_files'],
-				'fileEditPath' => $this->INSTALL['FILE']['EDIT_path'],
-				'filePreviousMd5' => md5($fileContent),
-				'fileMd5' => md5($this->INSTALL['typo3conf_files']),
-				'fileContent' => GeneralUtility::formatForTextarea($fileContent),
-				'winToUnixBrChecked' => TYPO3_OS == 'WIN' ? '' : 'checked="checked"',
-				'winToUnixBr' => 'Convert Windows linebreaks (13-10) to Unix (10)',
-				'backupChecked' => @is_file($backupFile) ? 'checked="checked"' : '',
-				'backup' => 'Make backup copy (rename to ' . basename($backupFile) . ')'
-			);
-			// Fill the markers in the subpart to edit the files
-			$fileEditContent = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($fileEditContent, $fileEditMarkers, '###|###', TRUE, FALSE);
-		}
-		if ($this->allowFileEditOutsite_typo3conf_dir) {
-			// Get the subpart to show if files are allowed outside the directory typo3conf
-			$allowFileEditOutsideTypo3ConfDirSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###ALLOWFILEEDITOUTSIDETYPO3CONFDIR###');
-			// Define the markers content
-			$allowFileEditOutsideTypo3ConfDirMarkers = array(
-				'action' => $this->action,
-				'pathSite' => PATH_site,
-				'editPath' => $this->INSTALL['FILE']['EDIT_path'],
-				'set' => 'Set'
-			);
-			// Fill the markers in the subpart
-			$allowFileEditOutsideTypo3ConfDirSubPart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($allowFileEditOutsideTypo3ConfDirSubPart, $allowFileEditOutsideTypo3ConfDirMarkers, '###|###', TRUE, FALSE);
-		}
-		// Substitute the subpart to edit the file
-		$fileListContent = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###FILEEDIT###', $fileEditContent);
-		// Substitute the subpart when files can be edited outside typo3conf directory
-		$fileListContent = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($fileListContent, '###ALLOWFILEEDITOUTSIDETYPO3CONFDIR###', $allowFileEditOutsideTypo3ConfDirSubPart);
-		// Substitute the subpart for the files
-		$fileListContent = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($fileListContent, '###FILES###', implode(LF, $files));
-		// Define the markers content
-		$fileListMarkers = array(
-			'editPath' => '(' . $EDIT_path . ')',
-			'deleteTempCachedUrl' => $this->action . '&amp;TYPO3_INSTALL[delTempCached]=1',
-			'deleteTempCached' => 'Delete temp_CACHED* files'
-		);
-		// Fill the markers
-		$fileListContent = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($fileListContent, $fileListMarkers, '###|###', TRUE, FALSE);
-		// Add the content to the message array
-		$this->message($headCode, 'Files in folder', $fileListContent);
-		// Output the page
-		$this->output($this->outputWrapper($this->printAll()));
-	}
-
-	/**
-	 * Show system environment check
-	 */
-	protected function systemEnvironmentCheck() {
-		$html = '<h3>System environment check</h3>';
-
-		/** @var $statusCheck \TYPO3\CMS\Install\SystemEnvironment\Check */
-		$statusCheck = GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\SystemEnvironment\\Check');
-		$statusObjects = $statusCheck->getStatus();
-
-		/** @var $statusUtility \TYPO3\CMS\Install\Status\StatusUtility */
-		$statusUtility = GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\Status\\StatusUtility');
-		$sortedStatusObjects = $statusUtility->sortBySeverity($statusObjects);
-		foreach ($sortedStatusObjects as $statusObjectsOfOneSeverity) {
-			$html .= $statusUtility->renderStatusObjectsAsHtml($statusObjectsOfOneSeverity);
-		}
-
-		$this->output($this->outputWrapper($html));
-	}
-
-	/**
-	 * Outputs system information
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function phpinformation() {
-		$headCode = 'PHP information';
-		$sVar = GeneralUtility::getIndpEnv('_ARRAY');
-		$sVar['CONST: PHP_OS'] = PHP_OS;
-		$sVar['CONST: TYPO3_OS'] = TYPO3_OS;
-		$sVar['CONST: PATH_thisScript'] = PATH_thisScript;
-		$sVar['CONST: php_sapi_name()'] = PHP_SAPI;
-		$sVar['OTHER: TYPO3_VERSION'] = TYPO3_version;
-		$sVar['OTHER: PHP_VERSION'] = phpversion();
-		$sVar['imagecreatefromgif()'] = function_exists('imagecreatefromgif');
-		$sVar['imagecreatefrompng()'] = function_exists('imagecreatefrompng');
-		$sVar['imagecreatefromjpeg()'] = function_exists('imagecreatefromjpeg');
-		$sVar['imagegif()'] = function_exists('imagegif');
-		$sVar['imagepng()'] = function_exists('imagepng');
-		$sVar['imagejpeg()'] = function_exists('imagejpeg');
-		$sVar['imagettftext()'] = function_exists('imagettftext');
-		$sVar['OTHER: IMAGE_TYPES'] = function_exists('imagetypes') ? imagetypes() : 0;
-		$gE_keys = explode(',', 'SERVER_PORT,SERVER_SOFTWARE,GATEWAY_INTERFACE,SCRIPT_NAME,PATH_TRANSLATED');
-		foreach ($gE_keys as $k) {
-			$sVar['SERVER: ' . $k] = $_SERVER[$k];
-		}
-		$gE_keys = explode(',', 'image_processing,gdlib,gdlib_png,im,im_path,im_path_lzw,im_version_5,im_negate_mask,im_imvMaskState,im_combine_filename');
-		foreach ($gE_keys as $k) {
-			$sVar['T3CV_GFX: ' . $k] = $GLOBALS['TYPO3_CONF_VARS']['GFX'][$k];
-		}
-		$debugInfo = array(
-			'### DEBUG SYSTEM INFORMATION - START ###'
-		);
-		foreach ($sVar as $kkk => $vvv) {
-			$debugInfo[] = str_pad(substr($kkk, 0, 20), 20) . ': ' . $vvv;
-		}
-		$debugInfo[] = '### DEBUG SYSTEM INFORMATION - END ###';
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'PhpInformation.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Define the markers content
-		$markers = array(
-			'explanation' => 'Please copy/paste the information from this text field into an email or bug-report as "Debug System Information" whenever you wish to get support or report problems. This information helps others to check if your system has some obvious misconfiguration and you\'ll get your help faster!',
-			'debugInfo' => GeneralUtility::formatForTextarea(implode(LF, $debugInfo))
-		);
-		// Fill the markers
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $markers, '###|###', TRUE, FALSE);
-		// Add the content to the message array
-		$this->message($headCode, 'DEBUG information', $content);
-		// Start with various server information
-		$getEnvArray = array();
-		$gE_keys = explode(',', 'QUERY_STRING,HTTP_ACCEPT,HTTP_ACCEPT_ENCODING,HTTP_ACCEPT_LANGUAGE,HTTP_CONNECTION,HTTP_COOKIE,HTTP_HOST,HTTP_USER_AGENT,REMOTE_ADDR,REMOTE_HOST,REMOTE_PORT,SERVER_ADDR,SERVER_ADMIN,SERVER_NAME,SERVER_PORT,SERVER_SIGNATURE,SERVER_SOFTWARE,GATEWAY_INTERFACE,SERVER_PROTOCOL,REQUEST_METHOD,SCRIPT_NAME,PATH_TRANSLATED,HTTP_REFERER,PATH_INFO');
-		foreach ($gE_keys as $k) {
-			$getEnvArray[$k] = getenv($k);
-		}
-		$this->message($headCode, 'TYPO3\\CMS\\Core\\Utility\\GeneralUtility::getIndpEnv()', $this->viewArray(GeneralUtility::getIndpEnv('_ARRAY')));
-		$this->message($headCode, 'getenv()', $this->viewArray($getEnvArray));
-		$this->message($headCode, '_ENV', $this->viewArray($_ENV));
-		$this->message($headCode, '_SERVER', $this->viewArray($_SERVER));
-		$this->message($headCode, '_COOKIE', $this->viewArray($_COOKIE));
-		$this->message($headCode, '_GET', $this->viewArray($_GET));
-		// Start with the phpinfo() part
-		ob_start();
-		phpinfo();
-		$contents = explode('<body>', ob_get_contents());
-		ob_end_clean();
-		$contents = explode('</body>', $contents[1]);
-		// Do code cleaning: phpinfo() is not XHTML1.1 compliant
-		$phpinfo = str_replace('<font', '<span', $contents[0]);
-		$phpinfo = str_replace('</font', '</span', $phpinfo);
-		$phpinfo = str_replace('<img border="0"', '<img', $phpinfo);
-		$phpinfo = str_replace('<a name=', '<a id=', $phpinfo);
-		// Add phpinfo() to the message array
-		$this->message($headCode, 'phpinfo()', '
-			<div class="phpinfo">
-				' . $phpinfo . '
-			</div>
-		');
-		// Output the page
-		$this->output($this->outputWrapper($this->printAll()));
-	}
-
-	/*******************************
-	 *
-	 * cleanup manager
-	 *
-	 *******************************/
-	/**
-	 * Provides a tool cleaning up various tables in the database
-	 *
-	 * @return void
-	 * @author Robert Lemke <rl@robertlemke.de>
-	 * @todo Add more functionality ...
-	 * @todo Define visibility
-	 */
-	public function cleanupManager() {
-		$headCode = 'Clean up your TYPO3 installation';
-		$this->message($headCode, 'Database cache tables', '
-			<p>
-				<strong>Clear cached image sizes</strong>
-				<br />
-				Clears the cache used for memorizing sizes of all images used in
-				your website. This information is cached in order to gain
-				performance and will be stored each time a new image is being
-				displayed in the frontend.
-			</p>
-			<p>
-				You should <em>Clear All Cache</em> in the backend after
-				clearing this cache.
-			</p>
-		');
-		$tables = $this->sqlHandler->getListOfTables();
-		$action = $this->INSTALL['cleanup_type'];
-		if (($action == 'cache_imagesizes' || $action == 'all') && isset($tables['cache_imagesizes'])) {
-			$GLOBALS['TYPO3_DB']->exec_TRUNCATEquery('cache_imagesizes');
-		}
-		$cleanupType = array(
-			'all' => 'Clean up everything'
-		);
-		// Get cache_imagesizes info
-		if (isset($tables['cache_imagesizes'])) {
-			$cleanupType['cache_imagesizes'] = 'Clear cached image sizes only';
-			$cachedImageSizesCounter = intval($GLOBALS['TYPO3_DB']->exec_SELECTcountRows('*', 'cache_imagesizes'));
-		} else {
-			$this->message($headCode, 'Table cache_imagesizes does not exist!', '
-				<p>
-					The table cache_imagesizes was not found. Please check your
-					database settings in Basic Configuration and compare your
-					table definition with the Database Analyzer.
-				</p>
-			', 2);
-			$cachedImageSizesCounter = 'unknown';
-		}
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'CleanUpManager.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Get the subpart for the 'Clean up' dropdown
-		$cleanUpOptionsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###CLEANUPOPTIONS###');
-		$cleanUpOptions = array();
-		foreach ($cleanupType as $cleanUpKey => $cleanUpValue) {
-			// Define the markers content
-			$cleanUpMarkers = array(
-				'value' => htmlspecialchars($cleanUpKey),
-				'data' => htmlspecialchars($cleanUpValue)
-			);
-			// Fill the markers in the subpart
-			$cleanUpOptions[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($cleanUpOptionsSubpart, $cleanUpMarkers, '###|###', TRUE, FALSE);
-		}
-		// Substitute the subpart for the 'Clean up' dropdown
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###CLEANUPOPTIONS###', implode(LF, $cleanUpOptions));
-		// Define the markers content
-		$markers = array(
-			'numberCached' => 'Number cached image sizes:',
-			'number' => $cachedImageSizesCounter,
-			'action' => $this->action,
-			'cleanUp' => 'Clean up',
-			'execute' => 'Execute'
-		);
-		// Fill the markers
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $markers, '###|###', TRUE, FALSE);
-		// Add the content to the message array
-		$this->message($headCode, 'Statistics', $content, 1);
-		$this->message($headCode, 'typo3temp/ folder', '
-			<p>
-				TYPO3 uses this directory for temporary files, mainly processed
-				and cached images.
-				<br />
-				The filenames are very cryptic; They are unique representations
-				of the file properties made by md5-hashing a serialized array
-				with information.
-				<br />
-				Anyway this directory may contain many thousand files and a lot
-				of them may be of no use anymore.
-			</p>
-			<p>
-				With this test you can delete the files in this folder. When you
-				do that, you should also clear the cache database tables
-				afterwards.
-			</p>
-		');
-		if (!$this->config_array['dir_typo3temp']) {
-			$this->message('typo3temp/ directory', 'typo3temp/ not writable!', '
-				<p>
-					You must make typo3temp/ write enabled before you can
-					proceed with this test.
-				</p>
-			', 2);
-			$this->output($this->outputWrapper($this->printAll()));
-			return;
-		}
-		// Run through files
-		$fileCounter = 0;
-		$deleteCounter = 0;
-		$criteriaMatch = 0;
-		$tmap = array('day' => 1, 'week' => 7, 'month' => 30);
-		$tt = $this->INSTALL['typo3temp_delete'];
-		$subdir = $this->INSTALL['typo3temp_subdir'];
-		if (strlen($subdir) && !preg_match('/^[[:alnum:]_]+\\/$/', $subdir)) {
-			die('subdir "' . $subdir . '" was not allowed!');
-		}
-		$action = $this->INSTALL['typo3temp_action'];
-		$d = @dir(($this->typo3temp_path . $subdir));
-		if (is_object($d)) {
-			while ($entry = $d->read()) {
-				$theFile = $this->typo3temp_path . $subdir . $entry;
-				if (@is_file($theFile)) {
-					$ok = 0;
-					$fileCounter++;
-					if ($tt) {
-						if (\TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($tt)) {
-							if (filesize($theFile) > $tt * 1024) {
-								$ok = 1;
-							}
-						} else {
-							if (fileatime($theFile) < $GLOBALS['EXEC_TIME'] - intval($tmap[$tt]) * 60 * 60 * 24) {
-								$ok = 1;
-							}
-						}
-					} else {
-						$ok = 1;
-					}
-					if ($ok) {
-						$hashPart = substr(basename($theFile), -14, 10);
-						// This is a kind of check that the file being deleted has a 10 char hash in it
-						if (!preg_match('/[^a-f0-9]/', $hashPart) || substr($theFile, -6) === '.cache' || substr($theFile, -4) === '.tbl' || substr(basename($theFile), 0, 8) === 'install_') {
-							if ($action && $deleteCounter < $action) {
-								$deleteCounter++;
-								unlink($theFile);
-							} else {
-								$criteriaMatch++;
-							}
-						}
-					}
-				}
-			}
-			$d->close();
-		}
-		// Find sub-dirs:
-		$subdirRegistry = array('' => '');
-		$d = @dir($this->typo3temp_path);
-		if (is_object($d)) {
-			while ($entry = $d->read()) {
-				$theFile = $entry;
-				if (@is_dir(($this->typo3temp_path . $theFile)) && $theFile != '..' && $theFile != '.') {
-					$subdirRegistry[$theFile . '/'] = $theFile . '/ (Files: ' . count(GeneralUtility::getFilesInDir(($this->typo3temp_path . $theFile))) . ')';
-				}
-			}
-		}
-		$deleteType = array(
-			'0' => 'All',
-			'day' => 'Last access more than a day ago',
-			'week' => 'Last access more than a week ago',
-			'month' => 'Last access more than a month ago',
-			'10' => 'Filesize greater than 10KB',
-			'50' => 'Filesize greater than 50KB',
-			'100' => 'Filesize greater than 100KB'
-		);
-		$actionType = array(
-			'0' => 'Don\'t delete, just display statistics',
-			'100' => 'Delete 100',
-			'500' => 'Delete 500',
-			'1000' => 'Delete 1000'
-		);
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'Typo3TempManager.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Get the subpart for 'Delete files by condition' dropdown
-		$deleteOptionsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###DELETEOPTIONS###');
-		$deleteOptions = array();
-		foreach ($deleteType as $deleteKey => $deleteValue) {
-			// Define the markers content
-			$deleteMarkers = array(
-				'value' => htmlspecialchars($deleteKey),
-				'selected' => !strcmp($deleteKey, $tt) ? 'selected="selected"' : '',
-				'data' => htmlspecialchars($deleteValue)
-			);
-			// Fill the markers in the subpart
-			$deleteOptions[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($deleteOptionsSubpart, $deleteMarkers, '###|###', TRUE, FALSE);
-		}
-		// Substitute the subpart for 'Delete files by condition' dropdown
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###DELETEOPTIONS###', implode(LF, $deleteOptions));
-		// Get the subpart for 'Number of files at a time' dropdown
-		$actionOptionsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###ACTIONOPTIONS###');
-		$actionOptions = array();
-		foreach ($actionType as $actionKey => $actionValue) {
-			// Define the markers content
-			$actionMarkers = array(
-				'value' => htmlspecialchars($actionKey),
-				'data' => htmlspecialchars($actionValue)
-			);
-			// Fill the markers in the subpart
-			$actionOptions[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($actionOptionsSubpart, $actionMarkers, '###|###', TRUE, FALSE);
-		}
-		// Substitute the subpart for 'Number of files at a time' dropdown
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###ACTIONOPTIONS###', implode(LF, $actionOptions));
-		// Get the subpart for 'From sub-directory' dropdown
-		$subDirectoryOptionsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###SUBDIRECTORYOPTIONS###');
-		$subDirectoryOptions = array();
-		foreach ($subdirRegistry as $subDirectoryKey => $subDirectoryValue) {
-			// Define the markers content
-			$subDirectoryMarkers = array(
-				'value' => htmlspecialchars($subDirectoryKey),
-				'selected' => !strcmp($subDirectoryKey, $this->INSTALL['typo3temp_subdir']) ? 'selected="selected"' : '',
-				'data' => htmlspecialchars($subDirectoryValue)
-			);
-			// Fill the markers in the subpart
-			$subDirectoryOptions[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($subDirectoryOptionsSubpart, $subDirectoryMarkers, '###|###', TRUE, FALSE);
-		}
-		// Substitute the subpart for 'From sub-directory' dropdown
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###SUBDIRECTORYOPTIONS###', implode(LF, $subDirectoryOptions));
-		// Define the markers content
-		$markers = array(
-			'numberTemporary' => 'Number of temporary files:',
-			'numberMatching' => 'Number matching:',
-			'numberDeleted' => 'Number deleted:',
-			'temporary' => $fileCounter - $deleteCounter,
-			'matching' => $criteriaMatch,
-			'deleteType' => '<span>' . htmlspecialchars($deleteType[$tt]) . '</span>',
-			'deleted' => $deleteCounter,
-			'deleteCondition' => 'Delete files by condition',
-			'numberFiles' => 'Number of files at a time:',
-			'fromSubdirectory' => 'From sub-directory:',
-			'execute' => 'Execute',
-			'explanation' => '
-				<p>
-					This tool will delete files only if the last 10 characters
-					before the extension (3 chars+\'.\') are hexadecimal valid
-					ciphers, which are lowercase a-f and 0-9.
-				</p>
-			'
-		);
-		// Fill the markers
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $markers, '###|###', TRUE, FALSE);
-		// Add the content to the message array
-		$this->message($headCode, 'Statistics', $content, 1);
-		// Output the page
-		$this->output($this->outputWrapper($this->printAll()));
-	}
-
-	/*******************************
-	 *
-	 * CONFIGURATION FORM
-	 *
-	 ********************************/
-	/**
-	 * Creating the form for editing the TYPO3_CONF_VARS options.
-	 *
-	 * @param string $type If get_form, display form, otherwise checks and store in localconf.php
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function generateConfigForm($type = '') {
-		$default_config_content = GeneralUtility::getUrl(
-			GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getDefaultConfigurationFileLocation()
-		);
-		$commentArr = $this->getDefaultConfigArrayComments($default_config_content);
-		switch ($type) {
-		case 'get_form':
-			// Get the template file
-			$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'GenerateConfigForm.html'));
-			// Get the template part from the file
-			$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-			foreach ($GLOBALS['TYPO3_CONF_VARS'] as $k => $va) {
-				$ext = '[' . $k . ']';
-				$this->message($ext, '$TYPO3_CONF_VARS[\'' . $k . '\']', $commentArr[0][$k], 1);
-				foreach ($va as $vk => $value) {
-					if (isset($GLOBALS['TYPO3_CONF_VARS_extensionAdded'][$k][$vk])) {
-						// Don't allow editing stuff which is added by extensions
-						// Make sure we fix potentially duplicated entries from older setups
-						$potentialValue = str_replace(array('\'.chr(10).\'', '\' . LF . \''), array(LF, LF), $value);
-						while (preg_match('/' . preg_quote($GLOBALS['TYPO3_CONF_VARS_extensionAdded'][$k][$vk], '/') . '$/', '', $potentialValue)) {
-							$potentialValue = preg_replace('/' . preg_quote($GLOBALS['TYPO3_CONF_VARS_extensionAdded'][$k][$vk], '/') . '$/', '', $potentialValue);
-						}
-						$value = $potentialValue;
-					}
-					$textAreaSubpart = '';
-					$booleanSubpart = '';
-					$textLineSubpart = '';
-					$description = trim($commentArr[1][$k][$vk]);
-					$isTextarea = preg_match('/^(<.*?>)?string \\(textarea\\)/i', $description) ? TRUE : FALSE;
-					$doNotRender = preg_match('/^(<.*?>)?string \\(exclude\\)/i', $description) ? TRUE : FALSE;
-					if (!is_array($value) && !$doNotRender && (!preg_match('/[' . LF . CR . ']/', $value) || $isTextarea)) {
-						$k2 = '[' . $vk . ']';
-						if ($isTextarea) {
-							// Get the subpart for a textarea
-							$textAreaSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###TEXTAREA###');
-							// Define the markers content
-							$textAreaMarkers = array(
-								'id' => $k . '-' . $vk,
-								'name' => 'TYPO3_INSTALL[extConfig][' . $k . '][' . $vk . ']',
-								'value' => htmlspecialchars(str_replace(array('\'.chr(10).\'', '\' . LF . \''), array(LF, LF), $value))
-							);
-							// Fill the markers in the subpart
-							$textAreaSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($textAreaSubpart, $textAreaMarkers, '###|###', TRUE, FALSE);
-						} elseif (preg_match('/^(<.*?>)?boolean/i', $description)) {
-							// Get the subpart for a checkbox
-							$booleanSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###BOOLEAN###');
-							// Define the markers content
-							$booleanMarkers = array(
-								'id' => $k . '-' . $vk,
-								'name' => 'TYPO3_INSTALL[extConfig][' . $k . '][' . $vk . ']',
-								'value' => $value && strcmp($value, '0') ? $value : 1,
-								'checked' => $value ? 'checked="checked"' : ''
-							);
-							// Fill the markers in the subpart
-							$booleanSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($booleanSubpart, $booleanMarkers, '###|###', TRUE, FALSE);
-						} else {
-							// Get the subpart for an input text field
-							$textLineSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###TEXTLINE###');
-							// Define the markers content
-							$textLineMarkers = array(
-								'id' => $k . '-' . $vk,
-								'name' => 'TYPO3_INSTALL[extConfig][' . $k . '][' . $vk . ']',
-								'value' => htmlspecialchars($value)
-							);
-							// Fill the markers in the subpart
-							$textLineSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($textLineSubpart, $textLineMarkers, '###|###', TRUE, FALSE);
-						}
-						// Substitute the subpart for a textarea
-						$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###TEXTAREA###', $textAreaSubpart);
-						// Substitute the subpart for a checkbox
-						$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###BOOLEAN###', $booleanSubpart);
-						// Substitute the subpart for an input text field
-						$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###TEXTLINE###', $textLineSubpart);
-						// Define the markers content
-						$markers = array(
-							'description' => $description,
-							'key' => '[' . $k . '][' . $vk . ']',
-							'label' => htmlspecialchars(GeneralUtility::fixed_lgd_cs($value, 40))
-						);
-						// Fill the markers
-						$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $markers, '###|###', TRUE, FALSE);
-						// Add the content to the message array
-						$this->message($ext, $k2, $content);
-					}
-				}
-			}
-			break;
-		default:
-			if (is_array($this->INSTALL['extConfig'])) {
-				$configurationPathValuePairs = array();
-				foreach ($this->INSTALL['extConfig'] as $k => $va) {
-					if (is_array($GLOBALS['TYPO3_CONF_VARS'][$k])) {
-						foreach ($va as $vk => $value) {
-							if (isset($GLOBALS['TYPO3_CONF_VARS'][$k][$vk])) {
-								$doit = 1;
-								if ($k == 'BE' && $vk == 'installToolPassword') {
-									if ($value) {
-										if (isset($_POST['installToolPassword_check'])) {
-											if (!$this->formProtection->validateToken((string) $_POST['formToken'], 'installToolPassword', 'change')) {
-												$doit = FALSE;
-												break;
-											}
-											if (!GeneralUtility::_GP('installToolPassword_check') || strcmp(GeneralUtility::_GP('installToolPassword_check'), $value)) {
-												$doit = FALSE;
-												$this->errorMessages[] = 'The two passwords did not ' . 'match! The password was not changed.';
-											}
-										}
-										if (GeneralUtility::_GP('installToolPassword_md5')) {
-											$value = md5($value);
-										}
-									} else {
-										$doit = 0;
-									}
-								}
-								$description = trim($commentArr[1][$k][$vk]);
-								if (preg_match('/^string \\(textarea\\)/i', $description)) {
-									// Force Unix linebreaks in textareas
-									$value = str_replace(CR, '', $value);
-									// Preserve linebreaks
-									$value = str_replace(LF, '\' . LF . \'', $value);
-								}
-								if (preg_match('/^boolean/i', $description)) {
-									// When submitting settings in the Install Tool, values that default to "FALSE" or "TRUE"
-									// in EXT:core/Configuration/DefaultConfiguration.php will be sent as "0" resp. "1".
-									// Therefore, reset the values to their boolean equivalent.
-									if ($GLOBALS['TYPO3_CONF_VARS'][$k][$vk] === FALSE && $value === '0') {
-										$value = FALSE;
-									} elseif ($GLOBALS['TYPO3_CONF_VARS'][$k][$vk] === TRUE && $value === '1') {
-										$value = TRUE;
-									}
-								}
-								if ($doit && strcmp($GLOBALS['TYPO3_CONF_VARS'][$k][$vk], $value)) {
-									$configurationPathValuePairs['"' . $k . '"' . '/' . '"' . $vk . '"'] = $value;
-								}
-							}
-						}
-					}
-				}
-				$this->setLocalConfigurationValues($configurationPathValuePairs);
-			}
-			break;
-		}
-	}
-
-	/**
-	 * Make an array of the comments in the EXT:core/Configuration/DefaultConfiguration.php file
-	 *
-	 * @param string $string The contents of the EXT:core/Configuration/DefaultConfiguration.php file
-	 * @param array $mainArray
-	 * @param array $commentArray
-	 * @return array
-	 * @todo Define visibility
-	 */
-	public function getDefaultConfigArrayComments($string, $mainArray = array(), $commentArray = array()) {
-		$lines = explode(LF, $string);
-		$in = 0;
-		$mainKey = '';
-		foreach ($lines as $lc) {
-			$lc = trim($lc);
-			if ($in) {
-				if (!strcmp($lc, ');')) {
-					$in = 0;
-				} else {
-					if (preg_match('/["\']([[:alnum:]_-]*)["\'][[:space:]]*=>(.*)/i', $lc, $reg)) {
-						preg_match('/,[\\t\\s]*\\/\\/(.*)/i', $reg[2], $creg);
-						$theComment = trim($creg[1]);
-						if (substr(strtolower(trim($reg[2])), 0, 5) == 'array' && !strcmp($reg[1], strtoupper($reg[1]))) {
-							$mainKey = trim($reg[1]);
-							$mainArray[$mainKey] = $theComment;
-						} elseif ($mainKey) {
-							$commentArray[$mainKey][$reg[1]] = $theComment;
-						}
-					}
-				}
-			}
-			if (!strcmp($lc, 'return array(')) {
-				$in = 1;
-			}
-		}
-		return array($mainArray, $commentArray);
-	}
-
-	/*******************************
-	 *
-	 * CHECK CONFIGURATION FUNCTIONS
-	 *
-	 *******************************/
-	/**
-	 * Checking php.ini configuration and set appropriate messages and flags.
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function checkConfiguration() {
-		$ext = 'php.ini configuration tests';
-		$this->message($ext);
-		$this->message($ext, 'Mail test', $this->check_mail('get_form'), -1);
-
-		if (\TYPO3\CMS\Core\Utility\PhpOptionsUtility::isSqlSafeModeEnabled()) {
-			$this->config_array['sql.safe_mode_user'] = get_current_user();
-		}
-	}
-
-	/**
-	 * Check if PHP function mail() works
-	 *
-	 * @param string $cmd If "get_form" then a formfield for the mail-address is shown. If not, it's checked if "check_mail" was in the INSTALL array and if so a test mail is sent to the recipient given.
-	 * @return string The mail form if it is requested with get_form
-	 * @todo Define visibility
-	 */
-	public function check_mail($cmd = '') {
-		switch ($cmd) {
-		case 'get_form':
-			$out = '
-					<p id="checkMailForm">
-						You can check the functionality by entering your email
-						address here and press the button. You should then
-						receive a testmail from "typo3installtool@example.org".
-					</p>
-				';
-			// Get the template file
-			$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'CheckMail.html'));
-			// Get the template part from the file
-			$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-			if (!empty($this->mailMessage)) {
-				// Get the subpart for the mail is sent message
-				$mailSentSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###MAILSENT###');
-			}
-			$template = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###MAILSENT###', $mailSentSubpart);
-			// Define the markers content
-			$markers = array(
-				'message' => $this->mailMessage,
-				'enterEmail' => 'Enter the email address',
-				'actionUrl' => $this->action . '#checkMailForm',
-				'submit' => 'Send test mail'
-			);
-			// Fill the markers
-			$out .= \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $markers, '###|###', TRUE, TRUE);
-			break;
-		default:
-			if (trim($this->INSTALL['check_mail'])) {
-				$subject = 'TEST SUBJECT';
-				$email = trim($this->INSTALL['check_mail']);
-				/** @var $mailMessage \TYPO3\CMS\Core\Mail\MailMessage */
-				$mailMessage = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage');
-				$mailMessage->addTo($email)->addFrom('typo3installtool@example.org', 'TYPO3 Install Tool')->setSubject($subject)->setBody('<html><body>HTML TEST CONTENT</body></html>');
-				$mailMessage->addPart('TEST CONTENT');
-				$mailMessage->send();
-				$this->mailMessage = 'Mail was sent to: ' . $email;
-			}
-			break;
-		}
-		return $out;
-	}
-
-	/**
-	 * Checking php extensions, specifically GDLib and Freetype
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function checkExtensions() {
-		if (GeneralUtility::_GP('testingTrueTypeSupport')) {
-			$this->checkTrueTypeSupport();
-		}
-		$ext = 'GDLib';
-		$this->message($ext);
-		$this->message($ext, 'FreeType quick-test (as GIF)', '
-			<p>
-				<img src="' . htmlspecialchars((GeneralUtility::getIndpEnv('REQUEST_URI') . '&testingTrueTypeSupport=1')) . '" alt="" />
-				<br />
-				If the text is exceeding the image borders you are
-				using Freetype 2 and need to set
-				TYPO3_CONF_VARS[GFX][TTFdpi]=96.
-			</p>
-		', -1);
-	}
-
-	/**
-	 * Checking and testing that the required writable directories are writable.
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function checkDirs() {
-		// Check typo3/temp/
-		$ext = 'Directories';
-		$this->message($ext);
-		$uniqueName = md5(uniqid(microtime()));
-		// The requirement level (the integer value, ie. the second value of the value array) has the following meanings:
-		// -1 = not required, but if it exists may be writable or not
-		//  0 = not required, if it exists the dir should be writable
-		//  1 = required, don't has to be writable
-		//  2 = required, has to be writable
-		$checkWrite = array(
-			'typo3temp/' => array('This folder is used by both the frontend (FE) and backend (BE) interface for all kind of temporary and cached files.', 2, 'dir_typo3temp'),
-			'typo3temp/pics/' => array('This folder is part of the typo3temp/ section. It needs to be writable, too.', 2, 'dir_typo3temp'),
-			'typo3temp/temp/' => array('This folder is part of the typo3temp/ section. It needs to be writable, too.', 2, 'dir_typo3temp'),
-			'typo3temp/llxml/' => array('This folder is part of the typo3temp/ section. It needs to be writable, too.', 2, 'dir_typo3temp'),
-			'typo3temp/cs/' => array('This folder is part of the typo3temp/ section. It needs to be writable, too.', 2, 'dir_typo3temp'),
-			'typo3temp/GB/' => array('This folder is part of the typo3temp/ section. It needs to be writable, too.', 2, 'dir_typo3temp'),
-			'typo3temp/locks/' => array('This folder is part of the typo3temp/ section. It needs to be writable, too.', 2, 'dir_typo3temp'),
-			'typo3conf/' => array('This directory contains the local configuration files of your website. TYPO3 must be able to write to these configuration files during setup and when the Extension Manager (EM) installs extensions.', 2),
-			'typo3conf/ext/' => array('Location for local extensions. Must be writable if the Extension Manager is supposed to install extensions for this website.', 0),
-			'typo3conf/l10n/' => array('Location for translations. Must be writable if the Extension Manager is supposed to install translations for extensions.', 0),
-			TYPO3_mainDir . 'ext/' => array('Location for global extensions. Must be writable if the Extension Manager is supposed to install extensions globally in the source.', -1),
-			'uploads/' => array('Location for uploaded files from RTE, in the subdirectories for uploaded files of content elements.', 2),
-			'uploads/pics/' => array('Typical location for uploaded files (images especially).', 0),
-			'uploads/media/' => array('Typical location for uploaded files (non-images especially).', 0),
-			$GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'] => array('Location for local files such as templates, independent uploads etc.', -1),
-			$GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'] . '_temp_/' => array('Typical temporary location for default upload of administrative files like import/export data, used by administrators.', 0),
-			$GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'] . 'user_upload/' => array('Default upload location for images by editors via Rich Text Editor and upload fields in the backend.', 0)
-		);
-		foreach ($checkWrite as $relpath => $descr) {
-			// Check typo3temp/
-			$general_message = $descr[0];
-			// If the directory is missing, try to create it
-			if (!@is_dir((PATH_site . $relpath))) {
-				GeneralUtility::mkdir(PATH_site . $relpath);
-			}
-			if (!@is_dir((PATH_site . $relpath))) {
-				if ($descr[1]) {
-					// required...
-					$this->message($ext, $relpath . ' directory does not exist and could not be created', '
-						<p>
-							<em>Full path: ' . PATH_site . $relpath . '</em>
-							<br />
-							' . $general_message . '
-						</p>
-						<p>
-							This error should not occur as ' . $relpath . ' must
-							always be accessible in the root of a TYPO3 website.
-						</p>
-					', 3);
-				} else {
-					if ($descr[1] == 0) {
-						$msg = 'This directory does not necessarily have to exist but if it does it must be writable.';
-					} else {
-						$msg = 'This directory does not necessarily have to exist and if it does it can be writable or not.';
-					}
-					$this->message($ext, $relpath . ' directory does not exist', '
-						<p>
-							<em>Full path: ' . PATH_site . $relpath . '</em>
-							<br />
-							' . $general_message . '
-						</p>
-						<p>
-							' . $msg . '
-						</p>
-					', 2);
-				}
-			} else {
-				$file = PATH_site . $relpath . $uniqueName;
-				@touch($file);
-				if (@is_file($file)) {
-					unlink($file);
-					if ($descr[2]) {
-						$this->config_array[$descr[2]] = 1;
-					}
-					$this->message($ext, $relpath . ' writable', '', -1);
-				} else {
-					$severity = $descr[1] == 2 || $descr[1] == 0 ? 3 : 2;
-					if ($descr[1] == 0 || $descr[1] == 2) {
-						$msg = 'The directory ' . $relpath . ' must be writable!';
-					} elseif ($descr[1] == -1 || $descr[1] == 1) {
-						$msg = 'The directory ' . $relpath . ' does not necessarily have to be writable.';
-					}
-					$this->message($ext, $relpath . ' directory not writable', '
-						<p>
-							<em>Full path: ' . $file . '</em>
-							<br />
-							' . $general_message . '
-						</p>
-						<p>
-							Tried to write this file (with touch()) but didn\'t
-							succeed.
-							<br />
-							' . $msg . '
-						</p>
-					', $severity);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Checking for existing ImageMagick installs.
-	 *
-	 * This tries to find available ImageMagick installations and tries to find the version numbers by executing "convert" without parameters. If the ->checkIMlzw is set, LZW capabilities of the IM installs are check also.
-	 *
-	 * @param array $paths Possible ImageMagick paths
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function checkImageMagick($paths) {
-		$ext = 'Check Image Magick';
-		$this->message($ext);
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'CheckImageMagick.html'));
-		$paths = array_unique($paths);
-		$programs = explode(',', 'gm,convert,combine,composite,identify');
-		$isExt = TYPO3_OS == 'WIN' ? '.exe' : '';
-		$this->config_array['im_combine_filename'] = 'combine';
-		foreach ($paths as $k => $v) {
-			if (!preg_match('/[\\/]$/', $v)) {
-				$v .= '/';
-			}
-			foreach ($programs as $filename) {
-				if (ini_get('open_basedir') || file_exists($v) && @is_file(($v . $filename . $isExt))) {
-					$version = $this->_checkImageMagick_getVersion($filename, $v);
-					if ($version > 0) {
-						// Assume GraphicsMagick
-						if ($filename == 'gm') {
-							$index[$v]['gm'] = $version;
-							// No need to check for "identify" etc.
-							continue;
-						} else {
-							// Assume ImageMagick
-							$index[$v][$filename] = $version;
-						}
-					}
-				}
-			}
-			if (count($index[$v]) >= 3 || $index[$v]['gm']) {
-				$this->config_array['im'] = 1;
-			}
-			if ($index[$v]['gm'] || !$index[$v]['composite'] && $index[$v]['combine']) {
-				$this->config_array['im_combine_filename'] = 'combine';
-			} elseif ($index[$v]['composite'] && !$index[$v]['combine']) {
-				$this->config_array['im_combine_filename'] = 'composite';
-			}
-			if (isset($index[$v]['convert']) && $this->checkIMlzw) {
-				$index[$v]['gif_capability'] = '' . $this->_checkImageMagickGifCapability($v);
-			}
-		}
-		$this->config_array['im_versions'] = $index;
-		if (!$this->config_array['im']) {
-			$this->message($ext, 'No ImageMagick installation available', '
-				<p>
-					It seems that there is no adequate ImageMagick installation
-					available at the checked locations (' . implode(', ', $paths) . ')
-					<br />
-					An \'adequate\' installation for requires \'convert\',
-					\'combine\'/\'composite\' and \'identify\' to be available
-				</p>
-			', 2);
-		} else {
-			// Get the subpart for the ImageMagick versions
-			$theCode = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###VERSIONS###');
-			// Get the subpart for each ImageMagick version
-			$rowsSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($theCode, '###ROWS###');
-			$rows = array();
-			foreach ($this->config_array['im_versions'] as $p => $v) {
-				$ka = array();
-				reset($v);
-				while (list($ka[]) = each($v)) {
-
-				}
-				// Define the markers content
-				$rowsMarkers = array(
-					'file' => $p,
-					'type' => implode('<br />', $ka),
-					'version' => implode('<br />', $v)
-				);
-				// Fill the markers in the subpart
-				$rows[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($rowsSubPart, $rowsMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for the ImageMagick versions
-			$theCode = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($theCode, '###ROWS###', implode(LF, $rows));
-			// Add the content to the message array
-			$this->message($ext, 'Available ImageMagick/GraphicsMagick installations:', $theCode, -1);
-		}
-		// Get the template file
-		$formSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###FORM###');
-		// Define the markers content
-		$formMarkers = array(
-			'actionUrl' => $this->action,
-			'lzwChecked' => $this->INSTALL['checkIM']['lzw'] ? 'checked="checked"' : '',
-			'lzwLabel' => 'Check LZW capabilities.',
-			'checkPath' => 'Check this path for ImageMagick installation:',
-			'imageMagickPath' => htmlspecialchars($this->INSTALL['checkIM']['path']),
-			'comment' => '(Eg. "D:\\wwwroot\\im537\\ImageMagick\\" for Windows or "/usr/bin/" for Unix)',
-			'send' => 'Send'
-		);
-		// Fill the markers
-		$formSubPart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($formSubPart, $formMarkers, '###|###', TRUE, FALSE);
-		// Add the content to the message array
-		$this->message($ext, 'Search for ImageMagick:', $formSubPart, 0);
-	}
-
-	/**
-	 * Checking GIF-compression capabilities of ImageMagick install
-	 *
-	 * @param string $path Path of ImageMagick installation
-	 * @return string Type of compression
-	 * @todo Define visibility
-	 */
-	public function _checkImageMagickGifCapability($path) {
-		if ($this->config_array['dir_typo3temp']) {
-			$tempPath = $this->typo3temp_path;
-			$uniqueName = md5(uniqid(microtime()));
-			$dest = $tempPath . $uniqueName . '.gif';
-			$src = $this->backPath . 'gfx/typo3logo.gif';
-			if (@is_file($src) && !strstr($src, ' ') && !strstr($dest, ' ')) {
-				$cmd = GeneralUtility::imageMagickCommand('convert', $src . ' ' . $dest, $path);
-				\TYPO3\CMS\Core\Utility\CommandUtility::exec($cmd);
-			} else {
-				die('No typo3/gfx/typo3logo.gif file!');
-			}
-			$out = '';
-			if (@is_file($dest)) {
-				$new_info = @getimagesize($dest);
-				clearstatcache();
-				$new_size = filesize($dest);
-				$src_info = @getimagesize($src);
-				clearstatcache();
-				$src_size = @filesize($src);
-				if ($new_info[0] != $src_info[0] || $new_info[1] != $src_info[1] || !$new_size || !$src_size) {
-					$out = 'error';
-				} else {
-					// NONE-LZW ratio was 5.5 in test
-					if ($new_size / $src_size > 4) {
-						$out = 'NONE';
-					} elseif ($new_size / $src_size > 1.5) {
-						$out = 'RLE';
-					} else {
-						$out = 'LZW';
-					}
-				}
-				unlink($dest);
-			}
-			return $out;
-		}
-	}
-
-	/**
-	 * Extracts the version number for ImageMagick
-	 *
-	 * @param string $file The program name to execute in order to find out the version number
-	 * @param string $path Path for the above program
-	 * @return string Version number of the found ImageMagick instance
-	 * @todo Define visibility
-	 */
-	public function _checkImageMagick_getVersion($file, $path) {
-		// Temporarily override some settings
-		$im_version = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'];
-		$combine_filename = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_combine_filename'];
-		if ($file == 'gm') {
-			$GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] = 'gm';
-			// Work-around, preventing execution of "gm gm"
-			$file = 'identify';
-			// Work-around - GM doesn't like to be executed without any arguments
-			$parameters = '-version';
-		} else {
-			$GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] = 'im5';
-			// Override the combine_filename setting
-			if ($file == 'combine' || $file == 'composite') {
-				$GLOBALS['TYPO3_CONF_VARS']['GFX']['im_combine_filename'] = $file;
-			}
-		}
-		$cmd = GeneralUtility::imageMagickCommand($file, $parameters, $path);
-		$retVal = FALSE;
-		\TYPO3\CMS\Core\Utility\CommandUtility::exec($cmd, $retVal);
-		$string = $retVal[0];
-		list(, $ver) = explode('Magick', $string);
-		list($ver) = explode(' ', trim($ver));
-		// Restore the values
-		$GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] = $im_version;
-		$GLOBALS['TYPO3_CONF_VARS']['GFX']['im_combine_filename'] = $combine_filename;
-		return trim($ver);
-	}
-
-	/**
-	 * Checks database username/password/host/database
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function checkDatabase() {
-		$ext = 'Check database';
-		$this->message($ext);
-		if (!extension_loaded('mysqli') && !\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('dbal')) {
-			$this->message($ext, 'MySQLi not available', '
-				<p>
-					PHP does not feature MySQLi support (which is pretty unusual).
-				</p>
-			', 2);
-		} else {
-			if (!TYPO3_db_host || !TYPO3_db_username) {
-				$this->message($ext, 'Username, password or host not set', '
-					<p>
-						You may need to enter data for these values:
-						<br />
-						Username: <strong>' . htmlspecialchars(TYPO3_db_username) . '</strong>
-						<br />
-						Host: <strong>' . htmlspecialchars(TYPO3_db_host) . '</strong>
-						<br />
-						<br />
-						Use the form below.
-					</p>
-				', 2);
-			}
-			if ($result = $GLOBALS['TYPO3_DB']->sql_pconnect()) {
-				$this->message($ext, 'Connected to SQL database successfully', '
-					<dl id="t3-install-databaseconnected">
-						<dt>
-							Username:
-						</dt>
-						<dd>
-							' . htmlspecialchars(TYPO3_db_username) . '
-						</dd>
-						<dt>
-							Host:
-						</dt>
-						<dd>
-							' . htmlspecialchars(TYPO3_db_host) . '
-						</dd>
-					</dl>
-				', -1, 1);
-				$this->config_array['mysqlConnect'] = 1;
-				if (!TYPO3_db) {
-					$this->message($ext, 'No database selected', '
-						<p>
-							Currently you have no database selected.
-							<br />
-							Please select one or create a new database.
-						</p>
-					', 3);
-					$this->config_array['no_database'] = 1;
-				} elseif (!$GLOBALS['TYPO3_DB']->sql_select_db()) {
-					$this->message($ext, 'Database', '
-						<p>
-							\'' . htmlspecialchars(TYPO3_db) . '\' could not be selected as database!
-							<br />
-							Please select another one or create a new database.
-						</p>
-					', 3, 1);
-					$this->config_array['no_database'] = 1;
-				} else {
-					$this->message($ext, 'Database', '
-						<p>
-							<strong>' . htmlspecialchars(TYPO3_db) . '</strong> is selected as
-							database.
-						</p>
-					', 1, 1);
-				}
-			} else {
-				$sqlSafeModeUser = '';
-				if ($this->config_array['sql.safe_mode_user']) {
-					$sqlSafeModeUser = '
-						<strong>Notice:</strong>
-						<em>sql.safe_mode</em> is turned on, so apparently your
-						username to the database is the same as the scriptowner,
-						which is ' . $this->config_array['sql.safe_mode_user'];
-				}
-				$this->message($ext, 'Could not connect to SQL database!', '
-					<p>
-						Connecting to SQL database failed with these settings:
-						<br />
-						Username: <strong>' . htmlspecialchars(TYPO3_db_username) . '</strong>
-						<br />
-						Host: <strong>' . htmlspecialchars(TYPO3_db_host) . '</strong>
-					</p>
-					<p>
-						Make sure you\'re using the correct set of data.
-						<br />
-						' . $sqlSafeModeUser . '
-					</p>
-				', 3);
-			}
-		}
-	}
-
-	/**
-	 * Prints form for updating localconf.php or updates localconf.php depending on $cmd
-	 *
-	 * @param string $cmd If "get_form" it outputs the form. Default is to write "localconf.php" based on input in ->INSTALL[localconf.php] array and flag ->setLocalconf
-	 * @return string Form HTML
-	 * @todo Define visibility
-	 */
-	public function setupGeneral($cmd = '') {
-		switch ($cmd) {
-		case 'get_form':
-			$out = $this->renderGeneral();
-			break;
-		default:
-			$this->transferChosenConfigurationValuesToConfigurationFile();
-			$out = '';
-			break;
-		}
-		return $out;
-	}
-
-	/**
-	 * Render general tab
-	 *
-	 * @return string Rendered view
-	 */
-	protected function renderGeneral() {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'SetupGeneral.html'));
-		// Get the template part from the file
-		$form = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Get the subpart for all modes
-		$allModesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($form, '###ALLMODES###');
-		// Define the markers content
-		$formMarkers['actionUrl'] = $this->action;
-		// Username
-		if (TYPO3_db_username) {
-			$username = TYPO3_db_username;
-		} elseif ($this->config_array['sql.safe_mode_user']) {
-			$username = $this->config_array['sql.safe_mode_user'];
-			// Get the subpart for the sql safe mode user
-			$sqlSafeModeUserSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($allModesSubpart, '###SQLSAFEMODEUSERSUBPART###');
-			// Define the markers content
-			$sqlSafeModeUserMarkers = array(
-				'labelSqlSafeModeUser' => 'sql.safe_mode_user:',
-				'sqlSafeModeUser' => $this->config_array['sql.safe_mode_user']
-			);
-			// Fill the markers in the subpart
-			$sqlSafeModeUserSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($sqlSafeModeUserSubpart, $sqlSafeModeUserMarkers, '###|###', TRUE, FALSE);
-		}
-		// Get the subpart for all modes
-		$allModesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($allModesSubpart, '###SQLSAFEMODEUSERSUBPART###', $sqlSafeModeUserSubpart);
-		// Define the markers content
-		$allModesMarkers = array(
-			'labelUsername' => 'Username:',
-			'username' => htmlspecialchars($username),
-			'labelPassword' => 'Password:',
-			'password' => htmlspecialchars(TYPO3_db_password),
-			'labelHost' => 'Host:',
-			'host' => htmlspecialchars(TYPO3_db_host),
-			'labelDatabase' => 'Database:',
-			'labelCreateDatabase' => 'Create database?'
-		);
-		// Get the subpart for the database list
-		$databasesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($allModesSubpart, '###DATABASELIST###');
-		if ($this->config_array['mysqlConnect']) {
-			// Get the subpart when database is available
-			$databaseAvailableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($databasesSubpart, '###DATABASEAVAILABLE###');
-			// Get the subpart for each database table
-			$databaseItemSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($databaseAvailableSubpart, '###DATABASEITEM###');
-			$dbArr = $this->getDatabaseList();
-			$dbIncluded = 0;
-			$databaseItems = array();
-			foreach ($dbArr as $dbname) {
-				// Define the markers content
-				$databaseItemMarkers = array(
-					'databaseSelected' => '',
-					'databaseName' => htmlspecialchars($dbname),
-					'databaseValue' => htmlspecialchars($dbname)
-				);
-				if ($dbname == TYPO3_db) {
-					$databaseItemMarkers['databaseSelected'] = 'selected="selected"';
-				}
-				// Fill the markers in the subpart
-				$databaseItems[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($databaseItemSubpart, $databaseItemMarkers, '###|###', TRUE, FALSE);
-				if ($dbname == TYPO3_db) {
-					$dbIncluded = 1;
-				}
-			}
-			if (!$dbIncluded && TYPO3_db) {
-				$databaseItemMarkers['databaseName'] = htmlspecialchars(TYPO3_db);
-				$databaseItemMarkers['databaseSelected'] = 'selected="selected"';
-				$databaseItemMarkers['databaseValue'] = htmlspecialchars(TYPO3_db) . ' (NO ACCESS!)';
-				// Fill the markers in the subpart
-				$databaseItems[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($databaseItemSubpart, $databaseItemMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for the database tables
-			$databaseAvailableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($databaseAvailableSubpart, '###DATABASEITEM###', implode(LF, $databaseItems));
-		} else {
-			// Get the subpart when the database is not available
-			$databaseNotAvailableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($databasesSubpart, '###DATABASENOTAVAILABLE###');
-			$databaseNotAvailableMarkers = array(
-				'typo3Db' => htmlspecialchars(TYPO3_db),
-				'labelNoDatabase' => '
-						(Database cannot be selected. Make sure that username, password and host
-						are set correctly. If MySQL does not allow persistent connections,
-						check that $TYPO3_CONF_VARS[\'SYS\'][\'no_pconnect\'] is set to "1".)
-					'
-			);
-			// Fill the markers in the subpart
-			$databaseNotAvailableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($databaseNotAvailableSubpart, $databaseNotAvailableMarkers, '###|###', TRUE, FALSE);
-		}
-		// Substitute the subpart when database is available
-		$databasesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($databasesSubpart, '###DATABASEAVAILABLE###', $databaseAvailableSubpart);
-		// Substitute the subpart when database is not available
-		$databasesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($databasesSubpart, '###DATABASENOTAVAILABLE###', $databaseNotAvailableSubpart);
-		// Substitute the subpart for the databases
-		$allModesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($allModesSubpart, '###DATABASELIST###', $databasesSubpart);
-		// Fill the markers in the subpart for all modes
-		$allModesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($allModesSubpart, $allModesMarkers, '###|###', TRUE, FALSE);
-		// Substitute the subpart for all modes
-		$form = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($form, '###ALLMODES###', $allModesSubpart);
-		if ($this->mode != '123') {
-			// Get the subpart for the regular mode
-			$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($form, '###REGULARMODE###');
-			// Define the markers content
-			$regularModeMarkers = array(
-				'labelSiteName' => 'Site name:',
-				'siteName' => htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']),
-				'labelEncryptionKey' => 'Encryption key:',
-				'encryptionKey' => htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey']),
-				'labelGenerateRandomKey' => 'Generate random key'
-			);
-			// Other
-			$fA = $this->setupGeneralCalculate();
-			$regularModeMarkers['labelCurrentValueIs'] = 'current value is';
-			// Disable exec function
-			if (is_array($fA['disable_exec_function'])) {
-				// Get the subpart for the disable exec function
-				$disableExecFunctionSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($regularModeSubpart, '###DISABLEEXECFUNCTIONSUBPART###');
-				$regularModeMarkers['labelDisableExecFunction'] = '[BE][disable_exec_function]=';
-				$regularModeMarkers['strongDisableExecFunction'] = (int) current($fA['disable_exec_function']);
-				$regularModeMarkers['defaultDisableExecFunction'] = (int) $GLOBALS['TYPO3_CONF_VARS']['BE']['disable_exec_function'];
-				$regularModeMarkers['disableExecFunction'] = (int) current($fA['disable_exec_function']);
-				// Fill the markers in the subpart
-				$disableExecFunctionSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($disableExecFunctionSubpart, $regularModeMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for the disable exec function
-			$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($regularModeSubpart, '###DISABLEEXECFUNCTIONSUBPART###', $disableExecFunctionSubpart);
-			// GDlib
-			if (is_array($fA['gdlib'])) {
-				// Get the subpart for the disable gd lib
-				$gdLibSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($regularModeSubpart, '###DISABLEGDLIB###');
-				$regularModeMarkers['labelGdLib'] = '[GFX][gdlib]=';
-				$regularModeMarkers['strongGdLib'] = (int) current($fA['gdlib']);
-				$regularModeMarkers['defaultGdLib'] = (int) $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib'];
-				$regularModeMarkers['gdLib'] = (int) current($fA['gdlib']);
-				// Fill the markers in the subpart
-				$gdLibSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($gdLibSubpart, $regularModeMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for the disable gdlib
-			$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($regularModeSubpart, '###DISABLEGDLIB###', $gdLibSubpart);
-			// GDlib PNG
-			if (is_array($fA['gdlib_png']) && $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib']) {
-				// Get the subpart for the gdlib png
-				$gdLibPngSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($regularModeSubpart, '###GDLIBPNGSUBPART###');
-				// Get the subpart for the dropdown options
-				$gdLibPngOptionSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($gdLibPngSubpart, '###GDLIBPNGOPTION###');
-				$gdLibPngLabels = $this->setLabelValueArray($fA['gdlib_png'], 2);
-				reset($gdLibPngLabels);
-				$regularModeMarkers['labelGdLibPng'] = '[GFX][gdlib_png]=';
-				$regularModeMarkers['strongGdLibPng'] = (string) current($gdLibPngLabels);
-				$regularModeMarkers['defaultGdLibPng'] = (int) $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png'];
-				$gdLibPngOptions = array();
-				foreach ($gdLibPngLabels as $k => $v) {
-					list($cleanV) = explode('|', $fA['gdlib_png'][$k]);
-					$gdLibPngMarker['value'] = htmlspecialchars($fA['gdlib_png'][$k]);
-					$gdLibPngMarker['data'] = htmlspecialchars($v);
-					if (!strcmp($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png'], $cleanV)) {
-						$gdLibPngMarker['selected'] = 'selected="selected"';
-					}
-					// Fill the markers in the subpart
-					$gdLibPngOptions[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($gdLibPngOptionSubpart, $gdLibPngMarker, '###|###', TRUE, FALSE);
-				}
-				// Substitute the subpart for the dropdown options
-				$gdLibPngSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($gdLibPngSubpart, '###GDLIBPNGOPTION###', implode(LF, $gdLibPngOptions));
-				// Fill the markers in the subpart
-				$gdLibPngSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($gdLibPngSubpart, $regularModeMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for the gdlib png
-			$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($regularModeSubpart, '###GDLIBPNGSUBPART###', $gdLibPngSubpart);
-			// ImageMagick
-			if (is_array($fA['im'])) {
-				// Get the subpart for ImageMagick
-				$imageMagickSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($regularModeSubpart, '###IMAGEMAGICKSUBPART###');
-				// Define the markers content
-				$regularModeMarkers['labelImageMagick'] = '[GFX][im]=';
-				$regularModeMarkers['strongImageMagick'] = (string) current($fA['im']);
-				$regularModeMarkers['defaultImageMagick'] = (int) $GLOBALS['TYPO3_CONF_VARS']['GFX']['im'];
-				$regularModeMarkers['imageMagick'] = (int) current($fA['im']);
-				// Fill the markers in the subpart
-				$imageMagickSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($imageMagickSubpart, $regularModeMarkers, '###|###', TRUE, FALSE);
-				// IM Combine Filename
-				// Get the subpart for ImageMagick Combine filename
-				$imCombineFileNameSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($regularModeSubpart, '###IMCOMBINEFILENAMESUBPART###');
-				// Define the markers content
-				$regularModeMarkers['labelImCombineFilename'] = '[GFX][im_combine_filename]';
-				$regularModeMarkers['strongImCombineFilename'] = htmlspecialchars((string) current($fA['im_combine_filename']));
-				$regularModeMarkers['defaultImCombineFilename'] = htmlspecialchars((string) $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_combine_filename']);
-				$regularModeMarkers['imCombineFilename'] = htmlspecialchars((string) ($fA['im_combine_filename'] ? current($fA['im_combine_filename']) : 'combine'));
-				// Fill the markers in the subpart
-				$imCombineFileNameSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($imCombineFileNameSubpart, $regularModeMarkers, '###|###', TRUE, FALSE);
-				// IM Version 5
-				// Get the subpart for ImageMagick Version 5
-				$imVersion5Subpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($regularModeSubpart, '###IMVERSION5SUBPART###');
-				// Define the markers content
-				$regularModeMarkers['labelImVersion5'] = '[GFX][im_version_5]=';
-				$regularModeMarkers['strongImVersion5'] = htmlspecialchars((string) current($fA['im_version_5']));
-				$regularModeMarkers['defaultImVersion5'] = htmlspecialchars((string) $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5']);
-				$regularModeMarkers['imVersion5'] = htmlspecialchars((string) ($fA['im_version_5'] ? current($fA['im_version_5']) : ''));
-				// Fill the markers in the subpart
-				$imVersion5Subpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($imVersion5Subpart, $regularModeMarkers, '###|###', TRUE, FALSE);
-				if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['im']) {
-					// IM Path
-					if (is_array($fA['im_path'])) {
-						// Get the subpart for ImageMagick path
-						$imPathSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($regularModeSubpart, '###IMPATHSUBPART###');
-						$labelImPath = $this->setLabelValueArray($fA['im_path'], 1);
-						reset($labelImPath);
-						$imPath = $this->setLabelValueArray($fA['im_path'], 0);
-						reset($imPath);
-						// Define the markers content
-						$regularModeMarkers['labelImPath'] = '[GFX][im_path]=';
-						$regularModeMarkers['strongImPath'] = htmlspecialchars((string) current($labelImPath));
-						$regularModeMarkers['defaultImPath'] = htmlspecialchars((string) $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path']);
-						$regularModeMarkers['ImPath'] = htmlspecialchars((string) current($imPath));
-						// Fill the markers in the subpart
-						$imPathSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($imPathSubpart, $regularModeMarkers, '###|###', TRUE, FALSE);
-					}
-					// IM Path LZW
-					if (is_array($fA['im_path_lzw'])) {
-						// Get the subpart for ImageMagick lzw path
-						$imPathLzwSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($regularModeSubpart, '###IMPATHLZWSUBPART###');
-						// Get the subpart for ImageMagick lzw path dropdown options
-						$imPathOptionSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($regularModeSubpart, '###IMPATHLZWOPTION###');
-						$labelImPathLzw = $this->setLabelValueArray($fA['im_path_lzw'], 1);
-						reset($labelImPathLzw);
-						$imPathLzw = $this->setLabelValueArray($fA['im_path_lzw'], 0);
-						reset($imPathLzw);
-						// Define the markers content
-						$regularModeMarkers['labelImPathLzw'] = '[GFX][im_path_lzw]=';
-						$regularModeMarkers['strongImPathLzw'] = htmlspecialchars((string) current($labelImPathLzw));
-						$regularModeMarkers['defaultImPathLzw'] = htmlspecialchars((string) $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path_lzw']);
-						$regularModeMarkers['ImPathLzw'] = htmlspecialchars((string) current($imPathLzw));
-						$imPathLzwOptions = array();
-						foreach ($labelImPathLzw as $k => $v) {
-							list($cleanV) = explode('|', $fA['im_path_lzw'][$k]);
-							// Define the markers content
-							$imPathLzwMarker = array(
-								'value' => htmlspecialchars($fA['im_path_lzw'][$k]),
-								'data' => htmlspecialchars($v)
-							);
-							if (!strcmp($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path_lzw'], $cleanV)) {
-								$imPathLzwMarker['selected'] = 'selected="selected"';
-							}
-							// Fill the markers in the subpart
-							$imPathLzwOptions[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($imPathOptionSubpart, $imPathLzwMarker, '###|###', TRUE, FALSE);
-						}
-						// Substitute the subpart for ImageMagick lzw path dropdown options
-						$imPathLzwSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($imPathLzwSubpart, '###IMPATHLZWOPTION###', implode(LF, $imPathLzwOptions));
-						// Fill the markers in the subpart
-						$imPathLzwSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($imPathLzwSubpart, $regularModeMarkers, '###|###', TRUE, FALSE);
-					}
-				}
-			}
-			// Substitute the subpart for ImageMagick
-			$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($regularModeSubpart, '###IMAGEMAGICKSUBPART###', $imageMagickSubpart);
-			// Substitute the subpart for ImageMagick Combine filename
-			$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($regularModeSubpart, '###IMCOMBINEFILENAMESUBPART###', $imCombineFileNameSubpart);
-			// Substitute the subpart for ImageMagick Version 5
-			$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($regularModeSubpart, '###IMVERSION5SUBPART###', $imVersion5Subpart);
-			// Substitute the subpart for ImageMagick path
-			$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($regularModeSubpart, '###IMPATHSUBPART###', $imPathSubpart);
-			// Substitute the subpart for ImageMagick lzw path
-			$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($regularModeSubpart, '###IMPATHLZWSUBPART###', $imPathLzwSubpart);
-			// TrueType Font dpi
-			// Get the subpart for TrueType dpi
-			$ttfDpiSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($regularModeSubpart, '###TTFDPISUBPART###');
-			// Define the markers content
-			$regularModeMarkers['labelTtfDpi'] = '[GFX][TTFdpi]=';
-			$regularModeMarkers['ttfDpi'] = htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['GFX']['TTFdpi']);
-			// Fill the markers in the subpart
-			$ttfDpiSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($ttfDpiSubpart, $regularModeMarkers, '###|###', TRUE, FALSE);
-			// Substitute the subpart for TrueType dpi
-			$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($regularModeSubpart, '###TTFDPISUBPART###', $ttfDpiSubpart);
-			// Fill the markers in the regular mode subpart
-			$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($regularModeSubpart, $regularModeMarkers, '###|###', TRUE, FALSE);
-		}
-		$formMarkers['labelUpdateLocalConf'] = 'Update configuration';
-		$formMarkers['labelNotice'] = 'NOTICE:';
-		$formMarkers['labelCommentUpdateLocalConf'] = 'By clicking this button, the configuration is updated with new values for the parameters listed above!';
-		// Substitute the subpart for regular mode
-		$form = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($form, '###REGULARMODE###', $regularModeSubpart);
-		// Fill the markers
-		return \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($form, $formMarkers, '###|###', TRUE, FALSE);
-	}
-
-	/**
-	 * Transfer data from $this->INSTALL to LocalConfiguration
-	 *
-	 * @return void
-	 */
-	protected function transferChosenConfigurationValuesToConfigurationFile() {
-		$localConfigurationPathValuePairs = array();
-		if (is_array($this->INSTALL['Database'])) {
-			// New database?
-			if (trim($this->INSTALL['Database']['NEW_DATABASE_NAME'])) {
-				$newDatabaseName = trim($this->INSTALL['Database']['NEW_DATABASE_NAME']);
-					// Hyphen is not allowed in unquoted database names (at least for MySQL databases)
-				if (!preg_match('/[^[:alnum:]_]/', $newDatabaseName)) {
-					if ($result = $GLOBALS['TYPO3_DB']->sql_pconnect()) {
-						if ($GLOBALS['TYPO3_DB']->admin_query('CREATE DATABASE ' . $newDatabaseName . ' CHARACTER SET utf8')) {
-							$this->INSTALL['Database']['typo_db'] = $newDatabaseName;
-							$this->messages[] = 'Database \'' . $newDatabaseName . '\' created';
-						} else {
-							$this->errorMessages[] = '
-									Could not create database \'' . $newDatabaseName . '\' (...not created)
-								';
-						}
-					} else {
-						$this->errorMessages[] = '
-								Could not connect to database when creating
-								database \'' . $newDatabaseName . '\' (...not
-								created)
-							';
-					}
-				} else {
-					$this->errorMessages[] = '
-							The NEW database name \'' . $newDatabaseName . '\' was
-							not alphanumeric, a-zA-Z0-9_ (...not created)
-						';
-				}
-			}
-			foreach ($this->INSTALL['Database'] as $key => $value) {
-				switch ((string) $key) {
-				case 'typo_db_username':
-					if (strlen($value) <= 50) {
-						if (strcmp(TYPO3_db_username, $value)) {
-							$localConfigurationPathValuePairs['DB/username'] = $value;
-						}
-					} else {
-						$this->errorMessages[] = '
-									Username \'' . $value . '\' was longer
-									than 50 chars (...not saved)
-								';
-					}
-					break;
-				case 'typo_db_password':
-					if (strlen($value) <= 50) {
-						if (strcmp(TYPO3_db_password, $value)) {
-							$localConfigurationPathValuePairs['DB/password'] = $value;
-						}
-					} else {
-						$this->errorMessages[] = '
-									Password was longer than 50 chars (...not saved)
-								';
-					}
-					break;
-				case 'typo_db_host':
-					if (preg_match('/^[a-zA-Z0-9_\\.-]+(:.+)?$/', $value) && strlen($value) <= 50) {
-						if (strcmp(TYPO3_db_host, $value)) {
-							$localConfigurationPathValuePairs['DB/host'] = $value;
-						}
-					} else {
-						$this->errorMessages[] = '
-									Host \'' . $value . '\' was not
-									alphanumeric (a-z, A-Z, 0-9 or _-.), or
-									longer than 50 chars (...not saved)
-								';
-					}
-					break;
-				case 'typo_db':
-					if (strlen($value) <= 50) {
-						if (strcmp(TYPO3_db, $value)) {
-							$localConfigurationPathValuePairs['DB/database'] = $value;
-						}
-					} else {
-						$this->errorMessages[] = '
-									Database name \'' . $value . '\' was
-									longer than 50 chars (...not saved)
-								';
-					}
-					break;
-				}
-			}
-		}
-		if (is_array($this->INSTALL['LocalConfiguration'])) {
-			foreach ($this->INSTALL['LocalConfiguration'] as $key => $value) {
-				switch ((string) $key) {
-				case 'disable_exec_function':
-					if (strcmp(GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getConfigurationValueByPath('BE/disable_exec_function'), $value)) {
-						$localConfigurationPathValuePairs['BE/disable_exec_function'] = $value ? 1 : 0;
-					}
-					break;
-				case 'sitename':
-					if (strcmp(GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getConfigurationValueByPath('SYS/sitename'), $value)) {
-						$localConfigurationPathValuePairs['SYS/sitename'] = $value;
-					}
-					break;
-				case 'encryptionKey':
-					if (strcmp(GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getConfigurationValueByPath('SYS/encryptionKey'), $value)) {
-						$localConfigurationPathValuePairs['SYS/encryptionKey'] = $value;
-						// The session object in this request must use the new encryption key to write to the right session folder
-						$GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] = $value;
-					}
-					break;
-				case 'compat_version':
-					if (strcmp(GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getConfigurationValueByPath('SYS/compat_version'), $value)) {
-						$localConfigurationPathValuePairs['SYS/compat_version'] = $value;
-					}
-					break;
-				case 'im_combine_filename':
-					if (strcmp(GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getConfigurationValueByPath('GFX/im_combine_filename'), $value)) {
-						$localConfigurationPathValuePairs['GFX/im_combine_filename'] = $value;
-					}
-					break;
-				case 'gdlib':
-
-				case 'gdlib_png':
-
-				case 'im':
-					if (strcmp(GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getConfigurationValueByPath('GFX/' . $key), $value)) {
-						$localConfigurationPathValuePairs['GFX/' . $key] = $value ? 1 : 0;
-					}
-					break;
-				case 'im_path':
-					list($value, $version) = explode('|', $value);
-					if (strcmp(GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getConfigurationValueByPath('GFX/' . $key), $value)) {
-						$localConfigurationPathValuePairs['GFX/' . $key] = $value;
-					}
-					if (doubleval($version) > 0 && doubleval($version) < 4) {
-						// Assume GraphicsMagick
-						$value_ext = 'gm';
-					} else {
-						// Assume ImageMagick 6.x
-						$value_ext = 'im6';
-					}
-					if (strcmp(strtolower(GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getConfigurationValueByPath('GFX/im_version_5')), $value_ext)) {
-						$localConfigurationPathValuePairs['GFX/im_version_5'] = $value_ext;
-					}
-					break;
-				case 'im_path_lzw':
-					list($value) = explode('|', $value);
-					if (strcmp(GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getConfigurationValueByPath('GFX/' . $key), $value)) {
-						$localConfigurationPathValuePairs['GFX/' . $key] = $value;
-					}
-					break;
-				case 'TTFdpi':
-					if (strcmp(GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getConfigurationValueByPath('GFX/TTFdpi'), $value)) {
-						$localConfigurationPathValuePairs['GFX/TTFdpi'] = $value;
-					}
-					break;
-				}
-			}
-			// Hook to modify localconf.php lines in the 1-2-3 installer
-			if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['writeLocalconf'])) {
-				foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['writeLocalconf'] as $classData) {
-					$hookObject = GeneralUtility::getUserObj($classData);
-					$dummy = array();
-					$hookObject->executeWriteLocalconf($dummy, $this->step, $this);
-				}
-			}
-		}
-		if (!empty($localConfigurationPathValuePairs)) {
-			$this->setLocalConfigurationValues($localConfigurationPathValuePairs);
-		}
-	}
-
-	/**
-	 * Set new configuration values in LocalConfiguration.php
-	 *
-	 * @param array $pathValuePairs
-	 * @return void
-	 */
-	protected function setLocalConfigurationValues(array $pathValuePairs) {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'WriteToLocalConfControl.html'));
-		if (GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->setLocalConfigurationValuesByPathValuePairs($pathValuePairs)) {
-			// Get the template part from the file
-			$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###CONTINUE###');
-			// Get the subpart for messages
-			$messagesSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###MESSAGES###');
-			$messages = array();
-			foreach ($this->messages as $message) {
-				// Define the markers content
-				$messagesMarkers['message'] = $message;
-				// Fill the markers in the subpart
-				$messages[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($messagesSubPart, $messagesMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for messages
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###MESSAGES###', implode(LF, $messages));
-			// Define the markers content
-			$markers = array(
-				'header' => 'Writing configuration',
-				'action' => $this->action,
-				'label' => 'Click to continue...'
-			);
-			// Fill the markers
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $markers, '###|###', TRUE, FALSE);
-			$this->outputExitBasedOnStep($content);
-		} else {
-			// Get the template part from the file
-			$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###NOCHANGE###');
-			// Define the markers content
-			$markers = array(
-				'header' => 'Writing configuration',
-				'message' => 'No values were changed, so nothing is updated!',
-				'action' => $this->action,
-				'label' => 'Click to continue...'
-			);
-			// Fill the markers
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $markers, '###|###', TRUE, FALSE);
-			$this->outputExitBasedOnStep($content);
-		}
-	}
-
-	/**
-	 * Writes or returns lines from localconf.php
-	 *
-	 * @param array $lines Array of lines to write back to localconf.php. Possibly
-	 * @param boolean $showOutput If TRUE then print what has been done.
-	 * @return void
-	 * @deprecated with 6.0, will be removed two versions later
-	 * @todo Define visibility
-	 */
-	public function writeToLocalconf_control($lines = '', $showOutput = TRUE) {
-		GeneralUtility::logDeprecatedFunction();
-	}
-
-	/**
-	 * If in 1-2-3 mode, send a redirect header response with the action and exit
-	 * otherwise send output to output() function
-	 *
-	 * @param string $content The HTML to output
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function outputExitBasedOnStep($content) {
-		if ($this->step) {
-			\TYPO3\CMS\Core\Utility\HttpUtility::redirect($this->action);
-		} else {
-			$this->output($this->outputWrapper($content));
-		}
-		die;
-	}
-
-	/**
-	 * This appends something to value in the input array based on $type. Private.
-	 *
-	 * @param array $arr
-	 * @param integer $type
-	 * @return array
-	 * @todo Define visibility
-	 */
-	public function setLabelValueArray($arr, $type) {
-		foreach ($arr as $k => $v) {
-			if ($this->config_array['im_versions'][$v]['gm']) {
-				$program = 'gm';
-			} else {
-				$program = 'convert';
-			}
-			switch ($type) {
-			case 0:
-				$arr[$k] .= '|' . $this->config_array['im_versions'][$v][$program];
-				break;
-			case 1:
-				if ($this->config_array['im_versions'][$v][$program]) {
-					$arr[$k] .= ' (' . $this->config_array['im_versions'][$v][$program];
-					$arr[$k] .= $this->config_array['im_versions'][$v]['gif_capability'] ? ', ' . $this->config_array['im_versions'][$v]['gif_capability'] : '';
-					$arr[$k] .= ')';
-				} else {
-					$arr[$k] .= '';
-				}
-				break;
-			case 2:
-				$arr[$k] .= ' (' . ($v == 1 ? 'PNG' : 'GIF') . ')';
-				break;
-			}
-		}
-		return $arr;
-	}
-
-	/**
-	 * Returns the list of available databases (with access-check based on username/password)
-	 *
-	 * @return array List of available databases
-	 */
-	public function getDatabaseList() {
-		$dbArr = array();
-		if ($result = $GLOBALS['TYPO3_DB']->sql_pconnect()) {
-			$dbArr = $GLOBALS['TYPO3_DB']->admin_get_dbs();
-		}
-		// remove some database names that MySQL uses internally from the list of choosable DB names
-		$reservedDatabaseNames = array('mysql', 'information_schema');
-		$databaseList = array_diff($dbArr, $reservedDatabaseNames);
-		return $databaseList;
-	}
-
-	/**
-	 * Calculates the suggested setup that should be written to typo3conf/LocalConfiguration.php
-	 *
-	 * if PNG/GIF/GD
-	 * - disable gdlib if nothing
-	 * - select png/gif if only one of them is available, else PNG/GIF selector, defaulting to GIF
-	 * - im_path (default to 4.2.9, preferable with LZW)		im_ver5-flag is set based on im_path being 4.2.9 or 5+
-	 * - im_path_lzw (default to LZW version, pref. 4.2.9)
-	 *
-	 * @return array Suggested setup
-	 * @todo Define visibility
-	 */
-	public function setupGeneralCalculate() {
-		$formArray['disable_exec_function'] = array(0);
-		$formArray['im_path'] = array('');
-		$formArray['im_path_lzw'] = array('');
-		$formArray['im_combine_filename'] = array('');
-		$formArray['im_version_5'] = array('');
-		$formArray['im'] = array(1);
-		$formArray['gdlib'] = array(1);
-		$formArray['gdlib_png'] = array(0, 1);
-		if ($this->config_array['im']) {
-			$formArray['im'] = array(1);
-			$found = ($LZW_found = 0);
-			$totalArr = array();
-			foreach ($this->config_array['im_versions'] as $path => $dat) {
-				if (count($dat) >= 3) {
-					if (doubleval($dat['convert']) < 5) {
-						$formArray['im_version_5'] = array(0);
-						if ($dat['gif_capability'] == 'LZW') {
-							$formArray['im_path'] = array($path);
-							$found = 2;
-						} elseif ($found < 2) {
-							$formArray['im_path'] = array($path);
-							$found = 1;
-						}
-					} elseif (doubleval($dat['convert']) >= 6) {
-						$formArray['im_version_5'] = array('im6');
-						if ($dat['gif_capability'] == 'LZW') {
-							$formArray['im_path'] = array($path);
-							$found = 2;
-						} elseif ($found < 2) {
-							$formArray['im_path'] = array($path);
-							$found = 1;
-						}
-					}
-				} elseif ($dat['gm']) {
-					$formArray['im_version_5'] = array('gm');
-					if ($dat['gif_capability'] == 'LZW') {
-						$formArray['im_path'] = array($path);
-						$found = 2;
-					} elseif ($found < 2) {
-						$formArray['im_path'] = array($path);
-						$found = 1;
-					}
-				}
-				if ($dat['gif_capability'] == 'LZW') {
-					if (doubleval($dat['convert']) < 5 || !$LZW_found) {
-						$formArray['im_path_lzw'] = array($path);
-						$LZW_found = 1;
-					}
-				} elseif ($dat['gif_capability'] == 'RLE' && !$LZW_found) {
-					$formArray['im_path_lzw'] = array($path);
-				}
-				$totalArr[] = $path;
-			}
-			$formArray['im_path'] = array_unique(array_merge($formArray['im_path'], $totalArr));
-			$formArray['im_path_lzw'] = array_unique(array_merge($formArray['im_path_lzw'], $totalArr));
-			$formArray['im_combine_filename'] = array($this->config_array['im_combine_filename']);
-		} else {
-			$formArray['im'] = array(0);
-		}
-		return $formArray;
-	}
-
-	/**
-	 * Returns TRUE if TTF lib is installed.
-	 *
-	 * @return void
-	 */
-	public function checkTrueTypeSupport() {
-		$im = @imagecreate(300, 50);
-		imagecolorallocate($im, 255, 255, 55);
-		$text_color = imagecolorallocate($im, 233, 14, 91);
-		@imagettftext(
-			$im,
-			GeneralUtility::freetypeDpiComp(20),
-			0,
-			10,
-			20,
-			$text_color,
-			\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('core') . 'Resources/Private/Font/vera.ttf',
-			'Testing Truetype support'
-		);
-		header('Content-type: image/gif');
-		imagegif($im);
-		die;
-	}
-
-	/**
-	 * Checks if extensions need further PHP modules
-	 *
-	 * @return array list of modules which are missing
-	 */
-	protected function getMissingPhpModules() {
-		// Hook to add additional required PHP modules in the 1-2-3 installer
-		$modules = array();
-		if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['requiredPhpModules'])) {
-			foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['requiredPhpModules'] as $classData) {
-				$hookObject = GeneralUtility::getUserObj($classData);
-				$modules = $hookObject->setRequiredPhpModules($modules, $this);
-			}
-		}
-		$result = array();
-		foreach ($modules as $module) {
-			if (is_array($module)) {
-				$detectedSubmodules = FALSE;
-				foreach ($module as $submodule) {
-					if (extension_loaded($submodule)) {
-						$detectedSubmodules = TRUE;
-					}
-				}
-				if ($detectedSubmodules === FALSE) {
-					$result[] = 'one of: (' . implode(', ', $module) . ')';
-				}
-			} else {
-				if (!extension_loaded($module)) {
-					$result[] = $module;
-				}
-			}
-		}
-		return $result;
-	}
-
-	/**
-	 * Returns general information about configuration of TYPO3.
-	 *
-	 * @return string HTML with the general information
-	 * @todo Define visibility
-	 */
-	public function generallyAboutConfiguration() {
-		return '
-		<p>
-			Local configuration is done by overriding default values in the
-			included file, typo3conf/LocalConfiguration.php. In this file you enter the
-			database information along with values in the global array
-			TYPO3_CONF_VARS.
-			<br />
-			The options in the TYPO3_CONF_VARS array and how to use it for your
-			own purposes is discussed in the base configuration file,
-			EXT:core/Configuration/DefaultConfiguration.php. This file sets up the default values and
-			subsequently includes the LocalConfiguration.php file in which you can then
-			override values.
-			<br />
-			See this page for <a href="' . TYPO3_URL_SYSTEMREQUIREMENTS . '">more
-			information about system requirements.</a>
-		</p>';
-	}
-
-	/**********************
-	 *
-	 * IMAGE processing
-	 *
-	 **********************/
-	/**
-	 * jesus.TIF:	IBM/LZW
-	 * jesus.GIF:	Save for web, 32 colors
-	 * jesus.JPG:	Save for web, 30 quality
-	 * jesus.PNG:	Save for web, PNG-24
-	 * jesus.tga	24 bit TGA file
-	 * jesus.pcx
-	 * jesus.bmp	24 bit BMP file
-	 * jesus_ps6.PDF:	PDF w/layers and vector data
-	 * typo3logo.ai:	Illustrator 8 file
-	 * pdf_from_imagemagick.PDF	PDF-file made by Acrobat Distiller from InDesign PS-file
-	 *
-	 *
-	 * Imagemagick
-	 * - Read formats
-	 * - Write png, gif, jpg
-	 * - compare gif size
-	 * - scaling (by stdgraphic)
-	 * - combining (by stdgraphic)
-	 *
-	 * GDlib:
-	 * - create from:....
-	 * - ttf text
-	 *
-	 * From TypoScript: (GD only, GD+IM, IM)
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function checkTheImageProcessing() {
-		$this->message('Image Processing', 'What is it?', '
-			<p>
-				TYPO3 is known for its ability to process images on the server.
-				<br />
-				In the backend interface (TBE) thumbnails are automatically
-				generated (by ImageMagick in thumbs.php) as well as icons, menu
-				items and pane tabs (by GDLib).
-				<br />
-				In the TypoScript enabled frontend all kinds of graphical
-				elements are processed. Typically images are scaled down to fit
-				the pages (by ImageMagick) and menu items, graphical headers and
-				such are generated automatically (by GDLib + ImageMagick).
-				<br />
-				In addition TYPO3 is able to handle many file formats (thanks to
-				ImageMagick), for example TIF, BMP, PCX, TGA, AI and PDF in
-				addition to the standard web formats; JPG, GIF, PNG.
-			</p>
-			<p>
-				In order to do this, TYPO3 uses two sets of tools:
-			</p>
-			<p>
-				<strong>ImageMagick / GraphicsMagick:</strong>
-				<br />
-				For conversion of non-web formats to webformats, combining
-				images with alpha-masks, performing image-effects like blurring
-				and sharpening.
-				<br />
-				ImageMagick is a collection of external programs on the server
-				called by the exec() function in PHP. TYPO3 uses three of these,
-				namely \'convert\' (converting fileformats, scaling, effects),
-				\'combine\'/\'composite\' (combining images with masks) and
-				\'identify\' (returns image information).
-				GraphicsMagick is an alternative to ImageMagick and can be enabled
-				by setting [GFX][im_version_5] to \'gm\'. This is recommended and
-				enabled by default.
-				<br />
-				Because ImageMagick and Graphicsmagick are external programs, a
-				requirement must be met: The programs must be installed on the
-				server and working.
-				<br />
-				ImageMagick is available for both Windows and Unix. The current
-				version is 6+.
-				<br />
-				ImageMagick homepage is at <a href="http://www.imagemagick.org/">http://www.imagemagick.org/</a>
-			</p>
-			<p>
-				<strong>GDLib:</strong>
-				<br />
-				For drawing boxes and rendering text on images with truetype
-				fonts. Also used for icons, menuitems and generally the
-				TypoScript GIFBUILDER object is based on GDlib, but extensively
-				utilizing ImageMagick to process intermediate results.
-				<br />
-				GDLib is accessed through internal functions in PHP, you\'ll need a version
-				of PHP with GDLib compiled in. Also in order to use TrueType
-				fonts with GDLib you\'ll need FreeType compiled in as well.
-				<br />
-			</p>
-			<p>
-				You can disable all image processing options in TYPO3
-				([GFX][image_processing]=0), but that would seriously disable
-				TYPO3.
-			</p>
-		');
-		$this->message('Image Processing', 'Verifying the image processing capabilities of your server', '
-			<p>
-				This page performs image processing and displays the result.
-				It\'s a thorough check that everything you\'ve configured is
-				working correctly.
-				<br />
-				It\'s quite simple to verify your installation; Just look down
-				the page, the images in pairs should look like each other. If
-				some images are not alike, something is wrong. You may also
-				notice warnings and errors if this tool found signs of any
-				problems.
-			</p>
-			<p>
-				The image to the right is the reference image (how it should be)
-				and to the left the image made by your server.
-				<br />
-				The reference images are made with the classic ImageMagick
-				install based on the 4.2.9 RPM and 5.2.3 RPM. If the version 5
-				flag is set, the reference images are made by the 5.2.3 RPM.
-			</p>
-			<p>
-				This test will work only if your ImageMagick/GDLib configuration
-				allows it to. The typo3temp/ folder must be writable for all the
-				temporary image files. They are all prefixed \'install_\' so
-				they are easy to recognize and delete afterwards.
-			</p>
-		');
-		$im_path = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path'];
-		if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] == 'gm') {
-			$im_path_version = $this->config_array['im_versions'][$im_path]['gm'];
-		} else {
-			$im_path_version = $this->config_array['im_versions'][$im_path]['convert'];
-		}
-		$im_path_lzw = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path_lzw'];
-		$im_path_lzw_version = $this->config_array['im_versions'][$im_path_lzw]['convert'];
-		$msg = '
-			<dl id="t3-install-imageprocessingim">
-				<dt>
-					ImageMagick enabled:
-				</dt>
-				<dd>
-					' . htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['GFX']['im']) . '
-				</dd>
-				<dt>
-					ImageMagick path:
-				</dt>
-				<dd>
-					' . htmlspecialchars($im_path) . ' <span>(' . htmlspecialchars($im_path_version) . ')</span>
-				</dd>
-				<dt>
-					ImageMagick path/LZW:
-				</dt>
-				<dd>
-					' . htmlspecialchars($im_path_lzw) . ' <span>(' . htmlspecialchars($im_path_lzw_version) . ')</span>
-				</dd>
-				<dt>
-					Version 5/GraphicsMagick flag:
-				</dt>
-				<dd>
-					' . ($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] ? htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5']) : '&nbsp;') . '
-				</dd>
-			</dl>
-			<dl id="t3-install-imageprocessingother">
-				<dt>
-					GDLib enabled:
-				</dt>
-				<dd>
-					' . ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib'] ? htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib']) : '&nbsp;') . '
-				</dd>
-				<dt>
-					GDLib using PNG:
-				</dt>
-				<dd>
-					' . ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png'] ? htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png']) : '&nbsp;') . '
-				</dd>
-				<dt>
-					IM5 effects enabled:
-				</dt>
-				<dd>
-					' . htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_v5effects']) . '
-					<span>(Blurring/Sharpening with IM 5+)</span>
-				</dd>
-				<dt>
-					Freetype DPI:
-				</dt>
-				<dd>
-					' . htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['GFX']['TTFdpi']) . '
-					<span>(Should be 96 for Freetype 2)</span>
-				</dd>
-				<dt>
-					Mask invert:
-				</dt>
-				<dd>
-					' . htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_imvMaskState']) . '
-					<span>(Should be set for some IM versions approx. 5.4+)</span>
-				</dd>
-			</dl>
-			<dl id="t3-install-imageprocessingfileformats">
-				<dt>
-					File Formats:
-				</dt>
-				<dd>
-					' . htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']) . '
-				</dd>
-			</dl>
-		';
-		// Various checks to detect IM/GM version mismatches
-		$mismatch = FALSE;
-		switch (strtolower($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'])) {
-		case 'gm':
-			if (doubleval($im_path_version) >= 2) {
-				$mismatch = TRUE;
-			}
-			break;
-		default:
-			if (($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] ? TRUE : FALSE) != doubleval($im_path_version) >= 6) {
-				$mismatch = TRUE;
-			}
-			break;
-		}
-		if ($mismatch) {
-			$msg .= '
-				<p>
-					Warning: Mismatch between the version of ImageMagick' . ' (' . htmlspecialchars($im_path_version) . ') and the configuration of ' . '[GFX][im_version_5] (' . htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5']) . ')
-				</p>
-			';
-			$etype = 2;
-		} else {
-			$etype = 1;
-		}
-		if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] == 'gm') {
-			$msg = str_replace('ImageMagick', 'GraphicsMagick', $msg);
-		}
-		$this->message('Image Processing', 'Current configuration', $msg, $etype);
-		if (!$GLOBALS['TYPO3_CONF_VARS']['GFX']['image_processing']) {
-			$this->message('Image Processing', 'Image Processing disabled!', '
-				<p>
-					Image Processing is disabled by the config flag
-					[GFX][image_processing] set to FALSE (zero)
-				</p>
-			', 2);
-			$this->output($this->outputWrapper($this->printAll()));
-			return;
-		}
-		if (!$this->config_array['dir_typo3temp']) {
-			$this->message('Image Processing', 'typo3temp/ not writable!', '
-				<p>
-					You must make typo3temp/ write enabled before you can
-					proceed with this test.
-				</p>
-			', 2);
-			$this->output($this->outputWrapper($this->printAll()));
-			return;
-		}
-		$msg = '
-			<p>
-				<a id="testmenu"></a>
-				Click each of these links in turn to test a topic.
-				<strong>
-					Please be aware that each test may take several seconds!
-				</strong>:
-			</p>
-		' . $this->imagemenu();
-		$this->message('Image Processing', 'Testmenu', $msg, '');
-		$parseStart = GeneralUtility::milliseconds();
-		$imageProc = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Imaging\\GraphicalFunctions');
-		$imageProc->init();
-		$imageProc->tempPath = $this->typo3temp_path;
-		$imageProc->dontCheckForExistingTempFile = 1;
-		$imageProc->filenamePrefix = 'install_';
-		$imageProc->dontCompress = 1;
-		$imageProc->alternativeOutputKey = 'TYPO3_INSTALL_SCRIPT';
-		$imageProc->noFramePrepended = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_noFramePrepended'];
-		// Very temporary!!!
-		$imageProc->dontUnlinkTempFiles = 0;
-		$imActive = $this->config_array['im'] && $im_path;
-		$gdActive = $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib'];
-		switch ($this->INSTALL['images_type']) {
-		case 'read':
-			$headCode = 'Reading and converting images';
-			$this->message($headCode, 'Supported file formats', '
-					<p>
-						This verifies that your ImageMagick installation is able
-						to read the nine default file formats; JPG, GIF, PNG,
-						TIF, BMP, PCX, TGA, PDF, AI. The tool \'identify\' will
-						be used to read the  pixeldimensions of non-web formats.
-						The tool \'convert\' is used to read the image and write
-						a temporary JPG-file.
-					</p>
-					<p>
-						In case the images appear remarkably darker than the reference images,
-						try to set [TYPO3_CONF_VARS][GFX][colorspace] = sRGB.
-					</p>
-				');
-			if ($imActive) {
-				// Reading formats - writing JPG
-				$extArr = explode(',', 'jpg,gif,png,tif,bmp,pcx,tga');
-				foreach ($extArr as $ext) {
-					if ($this->isExtensionEnabled($ext, $headCode, 'Read ' . strtoupper($ext))) {
-						$imageProc->IM_commands = array();
-						$theFile = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/jesus.' . $ext;
-						if (!@is_file($theFile)) {
-							die('Error: ' . $theFile . ' was not a file');
-						}
-						$imageProc->imageMagickConvert_forceFileNameBody = 'read_' . $ext;
-						$fileInfo = $imageProc->imageMagickConvert($theFile, 'jpg', '', '', '', '', array(), TRUE);
-						$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands);
-						$this->message($headCode, 'Read ' . strtoupper($ext), $result[0], $result[1]);
-					}
-				}
-				if ($this->isExtensionEnabled('pdf', $headCode, 'Read PDF')) {
-					$imageProc->IM_commands = array();
-					$theFile = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/pdf_from_imagemagick.pdf';
-					if (!@is_file($theFile)) {
-						die('Error: ' . $theFile . ' was not a file');
-					}
-					$imageProc->imageMagickConvert_forceFileNameBody = 'read_pdf';
-					$fileInfo = $imageProc->imageMagickConvert($theFile, 'jpg', '170', '', '', '', array(), TRUE);
-					$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands);
-					$this->message($headCode, 'Read PDF', $result[0], $result[1]);
-				}
-				if ($this->isExtensionEnabled('ai', $headCode, 'Read AI')) {
-					$imageProc->IM_commands = array();
-					$theFile = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/typo3logotype.ai';
-					if (!@is_file($theFile)) {
-						die('Error: ' . $theFile . ' was not a file');
-					}
-					$imageProc->imageMagickConvert_forceFileNameBody = 'read_ai';
-					$fileInfo = $imageProc->imageMagickConvert($theFile, 'jpg', '170', '', '', '', array(), TRUE);
-					$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands);
-					$this->message($headCode, 'Read AI', $result[0], $result[1]);
-				}
-			} else {
-				$this->message($headCode, 'Test skipped', '
-						<p>
-							Use of ImageMagick has been disabled in the
-							configuration.
-							<br />
-							Refer to section \'Basic Configuration\' to change
-							or review you configuration settings
-						</p>
-					', 2);
-			}
-			break;
-		case 'write':
-			// Writingformats - writing JPG
-			$headCode = 'Writing images';
-			$this->message($headCode, 'Writing GIF and PNG', '
-					<p>
-						This verifies that ImageMagick is able to write GIF and
-						PNG files.
-						<br />
-						The GIF-file is attempted compressed with LZW by the
-						TYPO3\\CMS\\Core\\Utility\\GeneralUtility::gif_compress() function.
-					</p>
-				');
-			if ($imActive) {
-				// Writing GIF
-				$imageProc->IM_commands = array();
-				$theFile = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/jesus.gif';
-				if (!@is_file($theFile)) {
-					die('Error: ' . $theFile . ' was not a file');
-				}
-				$imageProc->imageMagickConvert_forceFileNameBody = 'write_gif';
-				$fileInfo = $imageProc->imageMagickConvert($theFile, 'gif', '', '', '', '', array(), TRUE);
-				if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gif_compress']) {
-					clearstatcache();
-					$prevSize = GeneralUtility::formatSize(@filesize($fileInfo[3]));
-					$returnCode = GeneralUtility::gif_compress($fileInfo[3], '');
-					clearstatcache();
-					$curSize = GeneralUtility::formatSize(@filesize($fileInfo[3]));
-					$note = array('Note on gif_compress() function:', 'The \'gif_compress\' method used was \'' . $returnCode . '\'.<br />Previous filesize: ' . $prevSize . '. Current filesize:' . $curSize);
-				} else {
-					$note = array('Note on gif_compress() function:', '<em>Not used! Disabled by [GFX][gif_compress]</em>');
-				}
-				$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands, $note);
-				$this->message($headCode, 'Write GIF', $result[0], $result[1]);
-				// Writing PNG
-				$imageProc->IM_commands = array();
-				$theFile = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/jesus.gif';
-				$imageProc->imageMagickConvert_forceFileNameBody = 'write_png';
-				$fileInfo = $imageProc->imageMagickConvert($theFile, 'png', '', '', '', '', array(), TRUE);
-				$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands);
-				$this->message($headCode, 'Write PNG', $result[0], $result[1]);
-			} else {
-				$this->message($headCode, 'Test skipped', '
-						<p>
-							Use of ImageMagick has been disabled in the
-							configuration.
-							<br />
-							Refer to section \'Basic Configuration\' to change
-							or review you configuration settings
-						</p>
-					', 2);
-			}
-			break;
-		case 'scaling':
-			// Scaling
-			$headCode = 'Scaling images';
-			$this->message($headCode, 'Scaling transparent images', '
-					<p>
-						This shows how ImageMagick reacts when scaling
-						transparent GIF and PNG files.
-					</p>
-				');
-			if ($imActive) {
-				// Scaling transparent image
-				$imageProc->IM_commands = array();
-				$theFile = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/jesus2_transp.gif';
-				if (!@is_file($theFile)) {
-					die('Error: ' . $theFile . ' was not a file');
-				}
-				$imageProc->imageMagickConvert_forceFileNameBody = 'scale_gif';
-				$fileInfo = $imageProc->imageMagickConvert($theFile, 'gif', '150', '', '', '', array(), TRUE);
-				if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gif_compress']) {
-					clearstatcache();
-					$prevSize = GeneralUtility::formatSize(@filesize($fileInfo[3]));
-					$returnCode = GeneralUtility::gif_compress($fileInfo[3], '');
-					clearstatcache();
-					$curSize = GeneralUtility::formatSize(@filesize($fileInfo[3]));
-					$note = array('Note on gif_compress() function:', 'The \'gif_compress\' method used was \'' . $returnCode . '\'.<br />Previous filesize: ' . $prevSize . '. Current filesize:' . $curSize);
-				} else {
-					$note = array('Note on gif_compress() function:', '<em>Not used! Disabled by [GFX][gif_compress]</em>');
-				}
-				$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands, $note);
-				$this->message($headCode, 'GIF to GIF, 150 pixels wide', $result[0], $result[1]);
-				$imageProc->IM_commands = array();
-				$theFile = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/jesus2_transp.png';
-				if (!@is_file($theFile)) {
-					die('Error: ' . $theFile . ' was not a file');
-				}
-				$imageProc->imageMagickConvert_forceFileNameBody = 'scale_png';
-				$fileInfo = $imageProc->imageMagickConvert($theFile, 'png', '150', '', '', '', array(), TRUE);
-				$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands);
-				$this->message($headCode, 'PNG to PNG, 150 pixels wide', $result[0], $result[1]);
-				$imageProc->IM_commands = array();
-				$theFile = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/jesus2_transp.gif';
-				if (!@is_file($theFile)) {
-					die('Error: ' . $theFile . ' was not a file');
-				}
-				$imageProc->imageMagickConvert_forceFileNameBody = 'scale_jpg';
-				$fileInfo = $imageProc->imageMagickConvert($theFile, 'jpg', '150', '', '', '', array(), TRUE);
-				$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands);
-				$this->message($headCode, 'GIF to JPG, 150 pixels wide', $result[0], $result[1]);
-			} else {
-				$this->message($headCode, 'Test skipped', '
-						<p>
-							Use of ImageMagick has been disabled in the
-							configuration.
-							<br />
-							Refer to section \'Basic Configuration\' to change
-							or review you configuration settings
-						</p>
-					', 2);
-			}
-			break;
-		case 'combining':
-			// Combine
-			$headCode = 'Combining images';
-			$this->message($headCode, 'Combining images', '
-					<p>
-						This verifies that the ImageMagick tool,
-						\'combine\'/\'composite\', is able to combine two images
-						through a grayscale mask.
-						<br />
-						If the masking seems to work but inverted, that just
-						means you\'ll have to make sure the invert flag is set
-						(some combination of im_negate_mask/im_imvMaskState)
-					</p>
-				');
-			if ($imActive) {
-				$imageProc->IM_commands = array();
-				$input = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/greenback.gif';
-				$overlay = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/jesus.jpg';
-				$mask = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/blackwhite_mask.gif';
-				if (!@is_file($input)) {
-					die('Error: ' . $input . ' was not a file');
-				}
-				if (!@is_file($overlay)) {
-					die('Error: ' . $overlay . ' was not a file');
-				}
-				if (!@is_file($mask)) {
-					die('Error: ' . $mask . ' was not a file');
-				}
-				$output = $imageProc->tempPath . $imageProc->filenamePrefix . GeneralUtility::shortMD5(($imageProc->alternativeOutputKey . 'combine1')) . '.jpg';
-				$imageProc->combineExec($input, $overlay, $mask, $output, TRUE);
-				$fileInfo = $imageProc->getImageDimensions($output);
-				$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands);
-				$this->message($headCode, 'Combine using a GIF mask with only black and white', $result[0], $result[1]);
-				// Combine
-				$imageProc->IM_commands = array();
-				$input = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/combine_back.jpg';
-				$overlay = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/jesus.jpg';
-				$mask = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/combine_mask.jpg';
-				if (!@is_file($input)) {
-					die('Error: ' . $input . ' was not a file');
-				}
-				if (!@is_file($overlay)) {
-					die('Error: ' . $overlay . ' was not a file');
-				}
-				if (!@is_file($mask)) {
-					die('Error: ' . $mask . ' was not a file');
-				}
-				$output = $imageProc->tempPath . $imageProc->filenamePrefix . GeneralUtility::shortMD5(($imageProc->alternativeOutputKey . 'combine2')) . '.jpg';
-				$imageProc->combineExec($input, $overlay, $mask, $output, TRUE);
-				$fileInfo = $imageProc->getImageDimensions($output);
-				$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands);
-				$this->message($headCode, 'Combine using a JPG mask with graylevels', $result[0], $result[1]);
-			} else {
-				$this->message($headCode, 'Test skipped', '
-						<p>
-							Use of ImageMagick has been disabled in the
-							configuration.
-							<br />
-							Refer to section \'Basic Configuration\' to change
-							or review you configuration settings
-						</p>
-					', 2);
-			}
-			break;
-		case 'gdlib':
-			// GDLibrary
-			$headCode = 'GDLib';
-			$this->message($headCode, 'Testing GDLib', '
-					<p>
-						This verifies that the GDLib installation works properly.
-					</p>
-				');
-			if ($gdActive) {
-				// GD with box
-				$imageProc->IM_commands = array();
-				$im = imagecreatetruecolor(170, 136);
-				$Bcolor = ImageColorAllocate($im, 0, 0, 0);
-				ImageFilledRectangle($im, 0, 0, 170, 136, $Bcolor);
-				$workArea = array(0, 0, 170, 136);
-				$conf = array(
-					'dimensions' => '10,50,150,36',
-					'color' => 'olive'
-				);
-				$imageProc->makeBox($im, $conf, $workArea);
-				$output = $imageProc->tempPath . $imageProc->filenamePrefix . GeneralUtility::shortMD5('GDbox') . '.' . $imageProc->gifExtension;
-				$imageProc->ImageWrite($im, $output);
-				$fileInfo = $imageProc->getImageDimensions($output);
-				$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands);
-				$this->message($headCode, 'Create simple image', $result[0], $result[1]);
-				// GD from image with box
-				$imageProc->IM_commands = array();
-				$input = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'imgs/jesus.' . $imageProc->gifExtension;
-				if (!@is_file($input)) {
-					die('Error: ' . $input . ' was not a file');
-				}
-				$im = $imageProc->imageCreateFromFile($input);
-				$workArea = array(0, 0, 170, 136);
-				$conf = array();
-				$conf['dimensions'] = '10,50,150,36';
-				$conf['color'] = 'olive';
-				$imageProc->makeBox($im, $conf, $workArea);
-				$output = $imageProc->tempPath . $imageProc->filenamePrefix . GeneralUtility::shortMD5('GDfromImage+box') . '.' . $imageProc->gifExtension;
-				$imageProc->ImageWrite($im, $output);
-				$fileInfo = $imageProc->getImageDimensions($output);
-				$GDWithBox_filesize = @filesize($output);
-				$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands);
-				$this->message($headCode, 'Create image from file', $result[0], $result[1]);
-				// GD with text
-				$imageProc->IM_commands = array();
-				$im = imagecreatetruecolor(170, 136);
-				$Bcolor = ImageColorAllocate($im, 128, 128, 150);
-				ImageFilledRectangle($im, 0, 0, 170, 136, $Bcolor);
-				$workArea = array(0, 0, 170, 136);
-				$conf = array(
-					'iterations' => 1,
-					'angle' => 0,
-					'antiAlias' => 1,
-					'text' => 'HELLO WORLD',
-					'fontColor' => '#003366',
-					'fontSize' => 18,
-					'fontFile' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('core') . 'Resources/Private/Font/vera.ttf',
-					'offset' => '17,40'
-				);
-				$conf['BBOX'] = $imageProc->calcBBox($conf);
-				$imageProc->makeText($im, $conf, $workArea);
-				$output = $imageProc->tempPath . $imageProc->filenamePrefix . GeneralUtility::shortMD5('GDwithText') . '.' . $imageProc->gifExtension;
-				$imageProc->ImageWrite($im, $output);
-				$fileInfo = $imageProc->getImageDimensions($output);
-				$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands);
-				$this->message($headCode, 'Render text with TrueType font', $result[0], $result[1]);
-				if ($imActive) {
-					// extension: GD with text, niceText
-					$conf['offset'] = '17,65';
-					$conf['niceText'] = 1;
-					$imageProc->makeText($im, $conf, $workArea);
-					$output = $imageProc->tempPath . $imageProc->filenamePrefix . GeneralUtility::shortMD5('GDwithText-niceText') . '.' . $imageProc->gifExtension;
-					$imageProc->ImageWrite($im, $output);
-					$fileInfo = $imageProc->getImageDimensions($output);
-					$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands, array('Note on \'niceText\':', '\'niceText\' is a concept that tries to improve the antialiasing of the rendered type by actually rendering the textstring in double size on a black/white mask, downscaling the mask and masking the text onto the image through this mask. This involves ImageMagick \'combine\'/\'composite\' and \'convert\'.'));
-					$this->message($headCode, 'Render text with TrueType font using \'niceText\' option', '
-							<p>
-								(If the image has another background color than
-								the image above (eg. dark background color with
-								light text) then you will have to set
-								TYPO3_CONF_VARS[GFX][im_imvMaskState]=1)
-							</p>
-						' . $result[0], $result[1]);
-				} else {
-					$this->message($headCode, 'Render text with TrueType font using \'niceText\' option', '
-							<p>
-								<strong>Test is skipped!</strong>
-							</p>
-							<p>
-								Use of ImageMagick has been disabled in the
-								configuration. ImageMagick is needed to generate
-								text with the niceText option.
-								<br />
-								Refer to section \'Basic Configuration\' to
-								change or review you configuration settings
-							</p>
-						', 2);
-				}
-				if ($imActive) {
-					// extension: GD with text, niceText AND shadow
-					$conf['offset'] = '17,90';
-					$conf['niceText'] = 1;
-					$conf['shadow.'] = array(
-						'offset' => '2,2',
-						'blur' => $imageProc->V5_EFFECTS ? '20' : '90',
-						'opacity' => '50',
-						'color' => 'black'
-					);
-					$imageProc->makeShadow($im, $conf['shadow.'], $workArea, $conf);
-					$imageProc->makeText($im, $conf, $workArea);
-					$output = $imageProc->tempPath . $imageProc->filenamePrefix . GeneralUtility::shortMD5('GDwithText-niceText-shadow') . '.' . $imageProc->gifExtension;
-					$imageProc->ImageWrite($im, $output);
-					$fileInfo = $imageProc->getImageDimensions($output);
-					$result = $this->displayTwinImage($fileInfo[3], $imageProc->IM_commands, array('Note on drop shadows:', 'Drop shadows are done by using ImageMagick to blur a mask through which the drop shadow is generated. The blurring of the mask only works in ImageMagick 4.2.9 and <em>not</em> ImageMagick 5 - which is why you may see a hard and not soft shadow.'));
-					$this->message($headCode, 'Render \'niceText\' with a shadow under', '
-							<p>
-								(This test makes sense only if the above test
-								had a correct output. But if so, you may not see
-								a soft dropshadow from the third text string as
-								you should. In that case you are most likely
-								using ImageMagick 5 and should set the flag
-								TYPO3_CONF_VARS[GFX][im_v5effects]. However this
-								may cost server performance!
-							</p>
-						' . $result[0], $result[1]);
-				} else {
-					$this->message($headCode, 'Render \'niceText\' with a shadow under', '
-							<p>
-								<strong>Test is skipped!</strong>
-							</p>
-							<p>
-								Use of ImageMagick has been disabled in the
-								configuration. ImageMagick is needed to generate
-								shadows.
-								<br />
-								Refer to section \'Basic Configuration\' to
-								change or review you configuration settings
-							</p>
-						', 2);
-				}
-				if ($imageProc->gifExtension == 'gif') {
-					$buffer = 20;
-					$assess = 'This assessment is based on the filesize from \'Create image from file\' test, which were ' . $GDWithBox_filesize . ' bytes';
-					$goodNews = 'If the image was LZW compressed you would expect to have a size of less than 9000 bytes. If you open the image with Photoshop and saves it from Photoshop, you\'ll a filesize like that.<br />The good news is (hopefully) that your [GFX][im_path_lzw] path is correctly set so the gif_compress() function will take care of the compression for you!';
-					if ($GDWithBox_filesize < 8784 + $buffer) {
-						$msg = '
-								<p>
-									<strong>
-										Your GDLib appears to have LZW compression!
-									</strong>
-									<br />
-									This assessment is based on the filesize
-									from \'Create image from file\' test, which
-									were ' . $GDWithBox_filesize . ' bytes.
-									<br />
-									This is a real advantage for you because you
-									don\'t need to use ImageMagick for LZW
-									compressing. In order to make sure that
-									GDLib is used,
-									<strong>
-										please set the config option
-										[GFX][im_path_lzw] to an empty string!
-									</strong>
-									<br />
-									When you disable the use of ImageMagick for
-									LZW compressing, you\'ll see that the
-									gif_compress() function has a return code of
-									\'GD\' (for GDLib) instead of \'IM\' (for
-									ImageMagick)
-								</p>
-							';
-					} elseif ($GDWithBox_filesize > 19000) {
-						$msg = '
-								<p>
-									<strong>
-										Your GDLib appears to have no
-										compression at all!
-									</strong>
-									<br />
-									' . $assess . '
-									<br />
-									' . $goodNews . '
-								</p>
-							';
-					} else {
-						$msg = '
-								<p>
-									Your GDLib appears to have RLE compression
-									<br />
-									' . $assess . '
-									<br />
-									' . $goodNews . '
-								</p>
-							';
-					}
-					$this->message($headCode, 'GIF compressing in GDLib', '
-						' . $msg . '
-						', 1);
-				}
-			} else {
-				$this->message($headCode, 'Test skipped', '
-						<p>
-							Use of GDLib has been disabled in the configuration.
-							<br />
-							Refer to section \'Basic Configuration\' to change
-							or review you configuration settings
-						</p>
-					', 2);
-			}
-			break;
-		}
-		if ($this->INSTALL['images_type']) {
-			// End info
-			if ($this->fatalError) {
-				$this->message('Info', 'Errors', '
-					<p>
-						It seems that you had some fatal errors in this test.
-						Please make sure that your ImageMagick and GDLib
-						settings are correct. Refer to the
-						\'Basic Configuration\' section for more information and
-						debugging of your settings.
-					</p>
-				');
-			}
-			$parseMS = GeneralUtility::milliseconds() - $parseStart;
-			$this->message('Info', 'Parsetime', '
-				<p>
-					' . $parseMS . ' ms
-				</p>
-			');
-		}
-		$this->output($this->outputWrapper($this->printAll()));
-	}
-
-	/**
-	 * Check if image file extension is enabled
-	 * Adds error message to the message array
-	 *
-	 * @param string $ext The image file extension
-	 * @param string $headCode The header for the message
-	 * @param string $short The short description for the message
-	 * @return boolean TRUE if extension is enabled
-	 * @todo Define visibility
-	 */
-	public function isExtensionEnabled($ext, $headCode, $short) {
-		if (!GeneralUtility::inList($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'], $ext)) {
-			$this->message($headCode, $short, '
-				<p>
-					Skipped - extension not in the list of allowed extensions
-					([GFX][imagefile_ext]).
-				</p>
-			', 1);
-		} else {
-			return 1;
-		}
-	}
-
-	/**
-	 * Generate the HTML after reading and converting images
-	 * Displays the verification and the converted image if succeeded
-	 * Adds error messages if needed
-	 *
-	 * @param string $imageFile The file name of the converted image
-	 * @param array $IMcommands The ImageMagick commands used
-	 * @param string $note Additional note for image operation
-	 * @return array Contains content and highest error level
-	 * @todo Define visibility
-	 */
-	public function displayTwinImage($imageFile, $IMcommands = array(), $note = '') {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'DisplayTwinImage.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		$content = '';
-		$errorLevels = array(-1);
-		if ($imageFile) {
-			// Get the subpart for the images
-			$imageSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###IMAGE###');
-			$verifyFile = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'verify_imgs/' . basename($imageFile);
-			$destImg = @getImageSize($imageFile);
-			$destImgCode = '<img src="' . $this->backPath . '../' . substr($imageFile, strlen(PATH_site)) . '" ' . $destImg[3] . '>';
-			$verifyImg = @getImageSize($verifyFile);
-			$verifyImgCode = '<img src="' . $this->backPath . \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extRelPath('install') . 'verify_imgs/' . basename($verifyFile) . '" ' . $verifyImg[3] . '>';
-			clearstatcache();
-			$destImg['filesize'] = @filesize($imageFile);
-			clearstatcache();
-			$verifyImg['filesize'] = @filesize($verifyFile);
-			// Define the markers content
-			$imageMarkers = array(
-				'destWidth' => $destImg[0],
-				'destHeight' => $destImg[1],
-				'destUrl' => $this->backPath . '../' . substr($imageFile, strlen(PATH_site)),
-				'verifyWidth' => $verifyImg[0],
-				'verifyHeight' => $verifyImg[1],
-				'verifyUrl' => $this->backPath . \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extRelPath('install') . 'verify_imgs/' . basename($verifyFile),
-				'yourServer' => 'Your server:',
-				'yourServerInformation' => GeneralUtility::formatSize($destImg['filesize']) . ', ' . $destImg[0] . 'x' . $destImg[1] . ' pixels',
-				'reference' => 'Reference:',
-				'referenceInformation' => GeneralUtility::formatSize($verifyImg['filesize']) . ', ' . $verifyImg[0] . 'x' . $verifyImg[1] . ' pixels'
-			);
-			if ($destImg[0] != $verifyImg[0] || $destImg[1] != $verifyImg[1]) {
-				// Get the subpart for the different pixel dimensions message
-				$differentPixelDimensionsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($imageSubpart, '###DIFFERENTPIXELDIMENSIONS###');
-				// Define the markers content
-				$differentPixelDimensionsMarkers = array(
-					'message' => 'Pixel dimension are not equal!'
-				);
-				// Fill the markers in the subpart
-				$differentPixelDimensionsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($differentPixelDimensionsSubpart, $differentPixelDimensionsMarkers, '###|###', TRUE, FALSE);
-				$errorLevels[] = 2;
-			}
-			// Substitute the subpart for different pixel dimensions message
-			$imageSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($imageSubpart, '###DIFFERENTPIXELDIMENSIONS###', $differentPixelDimensionsSubpart);
-			if ($note) {
-				// Get the subpart for the note
-				$noteSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($imageSubpart, '###NOTE###');
-				// Define the markers content
-				$noteMarkers = array(
-					'message' => $note[0],
-					'label' => $note[1]
-				);
-				// Fill the markers in the subpart
-				$noteSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($noteSubpart, $noteMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for the note
-			$imageSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($imageSubpart, '###NOTE###', $noteSubpart);
-			if ($this->dumpImCommands && count($IMcommands)) {
-				$commands = $this->formatImCmds($IMcommands);
-				// Get the subpart for the ImageMagick commands
-				$imCommandsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($imageSubpart, '###IMCOMMANDS###');
-				// Define the markers content
-				$imCommandsMarkers = array(
-					'message' => 'ImageMagick commands executed:',
-					'rows' => \TYPO3\CMS\Core\Utility\MathUtility::forceIntegerInRange(count($commands), 2, 10),
-					'commands' => htmlspecialchars(implode(LF, $commands))
-				);
-				// Fill the markers in the subpart
-				$imCommandsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($imCommandsSubpart, $imCommandsMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for the ImageMagick commands
-			$imageSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($imageSubpart, '###IMCOMMANDS###', $imCommandsSubpart);
-			// Fill the markers
-			$imageSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($imageSubpart, $imageMarkers, '###|###', TRUE, FALSE);
-		} else {
-			// Get the subpart when no image has been generated
-			$noImageSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###NOIMAGE###');
-			$commands = $this->formatImCmds($IMcommands);
-			if (count($commands)) {
-				// Get the subpart for the ImageMagick commands
-				$commandsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($noImageSubpart, '###COMMANDSAVAILABLE###');
-				// Define the markers content
-				$commandsMarkers = array(
-					'rows' => \TYPO3\CMS\Core\Utility\MathUtility::forceIntegerInRange(count($commands), 2, 10),
-					'commands' => htmlspecialchars(implode(LF, $commands))
-				);
-				// Fill the markers in the subpart
-				$commandsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($commandsSubpart, $commandsMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for the ImageMagick commands
-			$noImageSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($noImageSubpart, '###COMMANDSAVAILABLE###', $commandsSubpart);
-			// Define the markers content
-			$noImageMarkers = array(
-				'message' => 'There was no result from the ImageMagick operation',
-				'label' => 'Below there\'s a dump of the ImageMagick commands executed:'
-			);
-			// Fill the markers
-			$noImageSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($noImageSubpart, $noImageMarkers, '###|###', TRUE, FALSE);
-			$errorLevels[] = 3;
-		}
-		// Substitute the subpart when image has been generated
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###IMAGE###', $imageSubpart);
-		// Substitute the subpart when no image has been generated
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###NOIMAGE###', $noImageSubpart);
-		return array($content, max($errorLevels));
-	}
-
-	/**
-	 * Format ImageMagick commands for use in HTML
-	 *
-	 * @param array $arr The ImageMagick commands
-	 * @return string The formatted commands
-	 * @todo Define visibility
-	 */
-	public function formatImCmds($arr) {
-		$out = array();
-		if (is_array($arr)) {
-			foreach ($arr as $k => $v) {
-				$out[] = $v[1];
-				if ($v[2]) {
-					$out[] = '   RETURNED: ' . $v[2];
-				}
-			}
-		}
-		return $out;
-	}
-
-	/**
-	 * Generate the menu for the test menu in 'image processing'
-	 *
-	 * @return string The HTML for the test menu
-	 * @todo Define visibility
-	 */
-	public function imagemenu() {
-		// Get the template file
-		$template = @file_get_contents((PATH_site . $this->templateFilePath . 'ImageMenu.html'));
-		// Get the subpart for the menu
-		$menuSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###MENU###');
-		// Get the subpart for the single item in the menu
-		$menuItemSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($menuSubPart, '###MENUITEM###');
-		$menuitems = array(
-			'read' => 'Reading image formats',
-			'write' => 'Writing GIF and PNG',
-			'scaling' => 'Scaling images',
-			'combining' => 'Combining images',
-			'gdlib' => 'GD library functions'
-		);
-		$c = 0;
-		$items = array();
-		foreach ($menuitems as $k => $v) {
-			// Define the markers content
-			$markers = array(
-				'backgroundColor' => $this->INSTALL['images_type'] == $k ? 'activeMenu' : 'generalTableBackground',
-				'url' => htmlspecialchars($this->action . '&TYPO3_INSTALL[images_type]=' . $k . '#imageMenu'),
-				'item' => $v
-			);
-			// Fill the markers in the subpart
-			$items[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($menuItemSubPart, $markers, '###|###', TRUE, FALSE);
-		}
-		// Substitute the subpart for the single item in the menu
-		$menuSubPart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($menuSubPart, '###MENUITEM###', implode(LF, $items));
-		return $menuSubPart;
-	}
-
-	/**********************
-	 *
-	 * DATABASE analysing
-	 *
-	 **********************/
-	/**
-	 * The Database Analyzer
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function checkTheDatabase() {
-		if (!$this->config_array['mysqlConnect']) {
-			$this->message('Database Analyser', 'Your database connection failed', '
-				<p>
-					Please go to the \'Basic Configuration\' section and correct
-					this problem first.
-				</p>
-			', 2);
-			$this->output($this->outputWrapper($this->printAll()));
-			return;
-		}
-		if ($this->config_array['no_database']) {
-			$this->message('Database Analyser', 'No database selected', '
-				<p>
-					Please go to the \'Basic Configuration\' section and correct
-					this problem first.
-				</p>
-			', 2);
-			$this->output($this->outputWrapper($this->printAll()));
-			return;
-		}
-		// Getting current tables
-		$whichTables = $this->sqlHandler->getListOfTables();
-		// Getting number of static_template records
-		if ($whichTables['static_template']) {
-			$static_template_count = $GLOBALS['TYPO3_DB']->exec_SELECTcountRows('uid', 'static_template');
-		}
-		$static_template_count = intval($static_template_count);
-		$headCode = 'Database Analyser';
-		$this->message($headCode, 'What is it?', '
-			<p>
-				In this section you can get an overview of your currently
-				selected database compared to sql-files. You can also import
-				sql-data directly into the database or upgrade tables from
-				earlier versions of TYPO3.
-			</p>
-		', 0);
-		$this->message($headCode, 'Connected to SQL database successfully', '
-			<dl id="t3-install-databaseconnected">
-				<dt>
-					Username:
-				</dt>
-				<dd>
-					' . htmlspecialchars(TYPO3_db_username) . '
-				</dd>
-				<dt>
-					Host:
-				</dt>
-				<dd>
-					' . htmlspecialchars(TYPO3_db_host) . '
-				</dd>
-			</dl>
-		', -1, 1);
-		$this->message($headCode, 'Database', '
-			<p>
-				<strong>' . htmlspecialchars(TYPO3_db) . '</strong> is selected as database.
-				<br />
-				Has <strong>' . count($whichTables) . '</strong> tables.
-			</p>
-		', -1, 1);
-		// Menu
-		$sql_files = array_merge(GeneralUtility::getFilesInDir(PATH_typo3conf, 'sql', 1, 1), array());
-		$action_type = $this->INSTALL['database_type'];
-		$actionParts = explode('|', $action_type);
-		if (count($actionParts) < 2) {
-			$action_type = '';
-		}
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'CheckTheDatabaseMenu.html'));
-		// Get the template part from the file
-		$menu = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###MENU###');
-		$menuMarkers = array(
-			'action' => $this->action,
-			'updateRequiredTables' => 'Update required tables',
-			'compare' => 'COMPARE',
-			'noticeCmpFileCurrent' => $action_type == 'cmpFile|CURRENT_TABLES' ? ' class="notice"' : '',
-			'dumpStaticData' => 'Dump static data',
-			'import' => 'IMPORT',
-			'noticeImportCurrent' => $action_type == 'import|CURRENT_STATIC' ? ' class="notice"' : '',
-			'noticeCmpTca' => $action_type == 'cmpTCA|' ? ' class="notice"' : '',
-			'compareWithTca' => 'Compare with $TCA',
-			'noticeAdminUser' => $action_type == 'adminUser|' ? ' class="notice"' : '',
-			'createAdminUser' => 'Create "admin" user',
-			'noticeUc' => $action_type == 'UC|' ? ' class="notice"' : '',
-			'resetUserPreferences' => 'Reset user preferences',
-			'noticeCache' => $action_type == 'cache|' ? ' class="notice"' : '',
-			'clearTables' => 'Clear tables'
-		);
-		// Get the subpart for extra SQL
-		$extraSql = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($menu, '###EXTRASQL###');
-		$directJump = '';
-		$extraSqlFiles = array();
-		foreach ($sql_files as $k => $file) {
-			if ($this->mode == '123' && !count($whichTables) && strstr($file, '_testsite')) {
-				$directJump = $this->action . '&TYPO3_INSTALL[database_type]=import|' . rawurlencode($file);
-			}
-			$lf = \TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($k);
-			$fShortName = substr($file, strlen(PATH_site));
-			$spec1 = ($spec2 = '');
-			// Define the markers content
-			$extraSqlMarkers = array(
-				'fileShortName' => $fShortName,
-				'fileSize' => GeneralUtility::formatSize(filesize($file)),
-				'noticeCmpFile' => $action_type == 'cmpFile|' . $file ? ' class="notice"' : '',
-				'file' => rawurlencode($file),
-				'noticeImport' => $action_type == 'import|' . $file ? ' class="notice"' : '',
-				'specs' => $spec1 . $spec2,
-				'noticeView' => $action_type == 'view|' . $file ? ' class="notice"' : '',
-				'view' => 'VIEW'
-			);
-			// Fill the markers in the subpart
-			$extraSqlFiles[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($extraSql, $extraSqlMarkers, '###|###', TRUE, FALSE);
-		}
-		// Substitute the subpart for extra SQL
-		$menu = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($menu, '###EXTRASQL###', implode(LF, $extraSqlFiles));
-		// Fill the markers
-		$menu = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($menu, $menuMarkers, '###|###', TRUE, FALSE);
-		if ($directJump) {
-			if (!$action_type) {
-				$this->message($headCode, 'Menu', '
-					<script language="javascript" type="text/javascript">
-						window.location.href = "' . $directJump . '";
-					</script>', 0, 1);
-			}
-		} else {
-			$this->message($headCode, 'Menu', '
-				<p>
-					From this menu you can select which of the available SQL
-					files you want to either compare or import/merge with the
-					existing database.
-				</p>
-				<dl id="t3-install-checkthedatabaseexplanation">
-					<dt>
-						COMPARE:
-					</dt>
-					<dd>
-						Compares the tables and fields of the current database
-						and the selected file. It also offers to \'update\' the
-						difference found.
-					</dd>
-					<dt>
-						IMPORT:
-					</dt>
-					<dd>
-						Imports the SQL-dump file into the current database. You
-						can either dump the raw file or choose which tables to
-						import. In any case, you\'ll see a new screen where you
-						must confirm the operation.
-					</dd>
-					<dt>
-						VIEW:
-					</dt>
-					<dd>
-						Shows the content of the SQL-file, limiting characters
-						on a single line to a reader-friendly amount.
-					</dd>
-				</dl>
-				<p>
-					The SQL-files are selected from typo3conf/ (here you can put
-					your own) The SQL-files should be made by the <em>mysqldump</em>
-					tool or at least be formatted like that tool would do.
-				</p>
-			' . $menu, 0, 1);
-		}
-		if ($action_type) {
-			switch ($actionParts[0]) {
-			case 'cmpFile':
-				$tblFileContent = '';
-				$hookObjects = array();
-				// Load TCA first
-				$this->includeTCA();
-				if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['checkTheDatabase'])) {
-					foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['checkTheDatabase'] as $classData) {
-						/** @var $hookObject Tx_Install_Interfaces_CheckTheDatabaseHook * */
-						$hookObject = GeneralUtility::getUserObj($classData);
-						if (!$hookObject instanceof \TYPO3\CMS\Install\CheckTheDatabaseHookInterface) {
-							throw new \UnexpectedValueException('$hookObject must implement interface TYPO3\\CMS\\Install\\CheckTheDatabaseHookInterface', 1315554770);
-						}
-						$hookObjects[] = $hookObject;
-					}
-				}
-				if (!strcmp($actionParts[1], 'CURRENT_TABLES')) {
-					$tblFileContent = '';
-					foreach ($GLOBALS['TYPO3_LOADED_EXT'] as $extKey => $loadedExtConf) {
-						if (is_array($loadedExtConf) && $loadedExtConf['ext_tables.sql']) {
-							$extensionSqlContent = GeneralUtility::getUrl($loadedExtConf['ext_tables.sql']);
-							$tblFileContent .= LF . LF . LF . LF . $extensionSqlContent;
-							foreach ($hookObjects as $hookObject) {
-								/** @var $hookObject Tx_Install_Interfaces_CheckTheDatabaseHook * */
-								$appendableTableDefinitions = $hookObject->appendExtensionTableDefinitions($extKey, $loadedExtConf, $extensionSqlContent, $this->sqlHandler, $this);
-								if ($appendableTableDefinitions) {
-									$tblFileContent .= $appendableTableDefinitions;
-									break;
-								}
-							}
-						}
-					}
-				} elseif (@is_file($actionParts[1])) {
-					$tblFileContent = GeneralUtility::getUrl($actionParts[1]);
-				}
-				foreach ($hookObjects as $hookObject) {
-					/** @var $hookObject Tx_Install_Interfaces_CheckTheDatabaseHook * */
-					$appendableTableDefinitions = $hookObject->appendGlobalTableDefinitions($tblFileContent, $this->sqlHandler, $this);
-					if ($appendableTableDefinitions) {
-						$tblFileContent .= $appendableTableDefinitions;
-						break;
-					}
-				}
-				// Add SQL content coming from the caching framework
-				$tblFileContent .= \TYPO3\CMS\Core\Cache\Cache::getDatabaseTableDefinitions();
-				// Add SQL content coming from the category registry
-				$tblFileContent .= \TYPO3\CMS\Core\Category\CategoryRegistry::getInstance()->getDatabaseTableDefinitions();
-				if ($tblFileContent) {
-					$fileContent = implode(LF, $this->sqlHandler->getStatementArray($tblFileContent, 1, '^CREATE TABLE '));
-					$FDfile = $this->sqlHandler->getFieldDefinitions_fileContent($fileContent);
-					if (!count($FDfile)) {
-						die('Error: There were no \'CREATE TABLE\' definitions in the provided file');
-					}
-					// Updating database...
-					if (is_array($this->INSTALL['database_update'])) {
-						$FDdb = $this->sqlHandler->getFieldDefinitions_database();
-						$diff = $this->sqlHandler->getDatabaseExtra($FDfile, $FDdb);
-						$update_statements = $this->sqlHandler->getUpdateSuggestions($diff);
-						$diff = $this->sqlHandler->getDatabaseExtra($FDdb, $FDfile);
-						$remove_statements = $this->sqlHandler->getUpdateSuggestions($diff, 'remove');
-						$results = array();
-						$results[] = $this->sqlHandler->performUpdateQueries($update_statements['clear_table'], $this->INSTALL['database_update']);
-						$results[] = $this->sqlHandler->performUpdateQueries($update_statements['add'], $this->INSTALL['database_update']);
-						$results[] = $this->sqlHandler->performUpdateQueries($update_statements['change'], $this->INSTALL['database_update']);
-						$results[] = $this->sqlHandler->performUpdateQueries($remove_statements['change'], $this->INSTALL['database_update']);
-						$results[] = $this->sqlHandler->performUpdateQueries($remove_statements['drop'], $this->INSTALL['database_update']);
-						$results[] = $this->sqlHandler->performUpdateQueries($update_statements['create_table'], $this->INSTALL['database_update']);
-						$results[] = $this->sqlHandler->performUpdateQueries($remove_statements['change_table'], $this->INSTALL['database_update']);
-						$results[] = $this->sqlHandler->performUpdateQueries($remove_statements['drop_table'], $this->INSTALL['database_update']);
-						$this->databaseUpdateErrorMessages = array();
-						foreach ($results as $resultSet) {
-							if (is_array($resultSet)) {
-								foreach ($resultSet as $key => $errorMessage) {
-									$this->databaseUpdateErrorMessages[$key] = $errorMessage;
-								}
-							}
-						}
-					}
-					// Init again / first time depending...
-					$FDdb = $this->sqlHandler->getFieldDefinitions_database();
-					$diff = $this->sqlHandler->getDatabaseExtra($FDfile, $FDdb);
-					$update_statements = $this->sqlHandler->getUpdateSuggestions($diff);
-					$diff = $this->sqlHandler->getDatabaseExtra($FDdb, $FDfile);
-					$remove_statements = $this->sqlHandler->getUpdateSuggestions($diff, 'remove');
-					$tLabel = 'Update database tables and fields';
-					if ($remove_statements || $update_statements) {
-						$formContent = $this->generateUpdateDatabaseForm('get_form', $update_statements, $remove_statements, $action_type);
-						$this->message($tLabel, 'Table and field definitions should be updated', '
-								<p>
-									There seems to be a number of differences
-									between the database and the selected
-									SQL-file.
-									<br />
-									Please select which statements you want to
-									execute in order to update your database:
-								</p>
-							' . $formContent, 2);
-					} else {
-						$formContent = $this->generateUpdateDatabaseForm('get_form', $update_statements, $remove_statements, $action_type);
-						$this->message($tLabel, 'Table and field definitions are OK.', '
-								<p>
-									The tables and fields in the current
-									database corresponds perfectly to the
-									database in the selected SQL-file.
-								</p>
-							', -1);
-					}
-				}
-				break;
-			case 'cmpTCA':
-				$this->includeTCA();
-				$FDdb = $this->sqlHandler->getFieldDefinitions_database();
-				// Displaying configured fields which are not in the database
-				$tLabel = 'Tables and fields in $TCA, but not in database';
-				$cmpTCA_DB = $this->compareTCAandDatabase($GLOBALS['TCA'], $FDdb);
-				if (!count($cmpTCA_DB['extra'])) {
-					$this->message($tLabel, 'Table and field definitions OK', '
-							<p>
-								All fields and tables configured in $TCA
-								appeared to exist in the database as well
-							</p>
-						', -1);
-				} else {
-					$this->message($tLabel, 'Invalid table and field definitions in $TCA!', '
-							<p>
-								There are some tables and/or fields configured
-								in the $TCA array which do not exist in the
-								database!
-								<br />
-								This will most likely cause you trouble with the
-								TYPO3 backend interface!
-							</p>
-						', 3);
-					foreach ($cmpTCA_DB['extra'] as $tableName => $conf) {
-						$this->message($tLabel, $tableName, $this->displayFields($conf['fields'], 0, 'Suggested database field:'), 2);
-					}
-				}
-				// Displaying tables that are not setup in
-				$cmpDB_TCA = $this->compareDatabaseAndTCA($FDdb, $GLOBALS['TCA']);
-				$excludeTables = 'be_sessions,fe_session_data,fe_sessions';
-				if (TYPO3_OS == 'WIN') {
-					$excludeTables = strtolower($excludeTables);
-				}
-				$excludeFields = array(
-					'be_users' => 'uc,lastlogin,usergroup_cached_list',
-					'fe_users' => 'uc,lastlogin,fe_cruser_id',
-					'pages' => 'SYS_LASTCHANGED',
-					'sys_dmail' => 'mailContent',
-					'tt_board' => 'doublePostCheck',
-					'tt_guest' => 'doublePostCheck',
-					'tt_products' => 'ordered'
-				);
-				$tCount = 0;
-				$fCount = 0;
-				$tLabel = 'Tables from database, but not in \\$TCA';
-				$fLabel = 'Fields from database, but not in \\$TCA';
-				$this->message($tLabel);
-				if (is_array($cmpDB_TCA['extra'])) {
-					foreach ($cmpDB_TCA['extra'] as $tableName => $conf) {
-						if (!GeneralUtility::inList($excludeTables, $tableName) && substr($tableName, 0, 4) != 'sys_' && substr($tableName, -3) != '_mm' && substr($tableName, 0, 6) != 'index_' && substr($tableName, 0, 6) != 'cache_') {
-							if ($conf['whole_table']) {
-								$this->message($tLabel, $tableName, $this->displayFields($conf['fields']), 1);
-								$tCount++;
-							} else {
-								list($theContent, $fC) = $this->displaySuggestions($conf['fields'], $excludeFields[$tableName]);
-								$fCount += $fC;
-								if ($fC) {
-									$this->message($fLabel, $tableName, $theContent, 1);
-								}
-							}
-						}
-					}
-				}
-				if (!$tCount) {
-					$this->message($tLabel, 'Correct number of tables in the database', '
-							<p>
-								There are no extra tables in the database
-								compared to the configured tables in the $TCA
-								array.
-							</p>
-						', -1);
-				} else {
-					$this->message($tLabel, 'Extra tables in the database', '
-							<p>
-								There are some tables in the database which are
-								not configured in the $TCA array.
-								<br />
-								You should probably not worry about this, but
-								please make sure that you know what these tables
-								are about and why they are not configured in
-								$TCA.
-							</p>
-						', 2);
-				}
-				if (!$fCount) {
-					$this->message($fLabel, 'Correct number of fields in the database', '
-							<p>
-								There are no additional fields in the database
-								tables compared to the configured fields in the
-								$TCA array.
-							</p>
-						', -1);
-				} else {
-					$this->message($fLabel, 'Extra fields in the database', '
-							<p>
-								There are some additional fields the database
-								tables which are not configured in the $TCA
-								array.
-								<br />
-								You should probably not worry about this, but
-								please make sure that you know what these fields
-								are about and why they are not configured in
-								$TCA.
-							</p>
-						', 2);
-				}
-				// Displaying actual and suggested field database defitions
-				if (is_array($cmpTCA_DB['matching'])) {
-					$tLabel = 'Comparison between database and $TCA';
-					$this->message($tLabel, 'Actual and suggested field definitions', '
-							<p>
-								This table shows you the suggested field
-								definitions which are calculated based on the
-								configuration in $TCA.
-								<br />
-								If the suggested value differs from the actual
-								current database value, you should not panic,
-								but simply check if the datatype of that field
-								is sufficient compared to the data, you want
-								TYPO3 to put there.
-							</p>
-						', 0);
-					foreach ($cmpTCA_DB['matching'] as $tableName => $conf) {
-						$this->message($tLabel, $tableName, $this->displayFieldComp($conf['fields'], $FDdb[$tableName]['fields']), 1);
-					}
-				}
-				break;
-			case 'import':
-				$mode123Imported = 0;
-				$tblFileContent = '';
-				if (preg_match('/^CURRENT_/', $actionParts[1])) {
-					if (!strcmp($actionParts[1], 'CURRENT_TABLES') || !strcmp($actionParts[1], 'CURRENT_TABLES+STATIC')) {
-						$tblFileContent = '';
-						foreach ($GLOBALS['TYPO3_LOADED_EXT'] as $loadedExtConf) {
-							if (is_array($loadedExtConf) && $loadedExtConf['ext_tables.sql']) {
-								$tblFileContent .= LF . LF . LF . LF . GeneralUtility::getUrl($loadedExtConf['ext_tables.sql']);
-							}
-						}
-					}
-					if (!strcmp($actionParts[1], 'CURRENT_STATIC') || !strcmp($actionParts[1], 'CURRENT_TABLES+STATIC')) {
-						foreach ($GLOBALS['TYPO3_LOADED_EXT'] as $loadedExtConf) {
-							if (is_array($loadedExtConf) && $loadedExtConf['ext_tables_static+adt.sql']) {
-								$tblFileContent .= LF . LF . LF . LF . GeneralUtility::getUrl($loadedExtConf['ext_tables_static+adt.sql']);
-							}
-						}
-					}
-					$tblFileContent .= LF . LF . LF . LF . \TYPO3\CMS\Core\Cache\Cache::getDatabaseTableDefinitions();
-				} elseif (@is_file($actionParts[1])) {
-					$tblFileContent = GeneralUtility::getUrl($actionParts[1]);
-				}
-				if ($tblFileContent) {
-					$tLabel = 'Import SQL dump';
-					// Getting statement array from
-					$statements = $this->sqlHandler->getStatementArray($tblFileContent, 1);
-					list($statements_table, $insertCount) = $this->sqlHandler->getCreateTables($statements, 1);
-					// Updating database...
-					if ($this->INSTALL['database_import_all']) {
-						$r = 0;
-						foreach ($statements as $k => $v) {
-							$res = $GLOBALS['TYPO3_DB']->admin_query($v);
-							$r++;
-						}
-						// Make a database comparison because some tables that are defined twice have
-						// not been created at this point. This applies to the "pages.*"
-						// fields defined in sysext/cms/ext_tables.sql for example.
-						$fileContent = implode(LF, $this->sqlHandler->getStatementArray($tblFileContent, 1, '^CREATE TABLE '));
-						$FDfile = $this->sqlHandler->getFieldDefinitions_fileContent($fileContent);
-						$FDdb = $this->sqlHandler->getFieldDefinitions_database();
-						$diff = $this->sqlHandler->getDatabaseExtra($FDfile, $FDdb);
-						$update_statements = $this->sqlHandler->getUpdateSuggestions($diff);
-						if (is_array($update_statements['add'])) {
-							foreach ($update_statements['add'] as $statement) {
-								$res = $GLOBALS['TYPO3_DB']->admin_query($statement);
-							}
-						}
-						if ($this->mode == '123') {
-							// Create default be_user admin/password
-							$username = 'admin';
-							$pass = 'password';
-							$count = $GLOBALS['TYPO3_DB']->exec_SELECTcountRows('uid', 'be_users', 'username=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($username, 'be_users'));
-							if (!$count) {
-								$insertFields = array(
-									'username' => $username,
-									'password' => md5($pass),
-									'admin' => 1,
-									'uc' => '',
-									'fileoper_perms' => 0,
-									'tstamp' => $GLOBALS['EXEC_TIME'],
-									'crdate' => $GLOBALS['EXEC_TIME']
-								);
-								$GLOBALS['TYPO3_DB']->exec_INSERTquery('be_users', $insertFields);
-							}
-
-							if (!$this->hasAdditionalSteps) {
-								$this->dispatchInitializeUpdates();
-							}
-						}
-
-						$this->message($tLabel, 'Imported ALL', '
-								<p>
-									Queries: ' . $r . '
-								</p>
-							', 1, 1);
-						if (GeneralUtility::_GP('goto_step')) {
-							$this->action .= '&step=' . GeneralUtility::_GP('goto_step');
-							\TYPO3\CMS\Core\Utility\HttpUtility::redirect($this->action);
-						}
-					} elseif (is_array($this->INSTALL['database_import'])) {
-						// Traverse the tables
-						foreach ($this->INSTALL['database_import'] as $table => $md5str) {
-							if ($md5str == md5($statements_table[$table])) {
-								$res = $GLOBALS['TYPO3_DB']->admin_query('DROP TABLE IF EXISTS ' . $table);
-								$res = $GLOBALS['TYPO3_DB']->admin_query($statements_table[$table]);
-								if ($insertCount[$table]) {
-									$statements_insert = $this->sqlHandler->getTableInsertStatements($statements, $table);
-									foreach ($statements_insert as $k => $v) {
-										$res = $GLOBALS['TYPO3_DB']->admin_query($v);
-									}
-								}
-								$this->message($tLabel, 'Imported \'' . $table . '\'', '
-										<p>
-											Rows: ' . $insertCount[$table] . '
-										</p>
-									', 1, 1);
-							}
-						}
-					}
-					$mode123Imported = $this->isBasicComplete($tLabel);
-					if (!$mode123Imported) {
-						// Re-Getting current tables - may have been changed during import
-						$whichTables = $this->sqlHandler->getListOfTables();
-						if (count($statements_table)) {
-							reset($statements_table);
-							$out = '';
-							// Get the template file
-							$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'CheckTheDatabaseImport.html'));
-							// Get the template part from the file
-							$content = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###IMPORT###');
-							if ($this->mode != '123') {
-								$tables = array();
-								// Get the subpart for regular mode
-								$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($content, '###REGULARMODE###');
-								foreach ($statements_table as $table => $definition) {
-									// Get the subpart for rows
-									$tableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($content, '###ROWS###');
-									// Fill the 'table exists' part when it exists
-									$exist = isset($whichTables[$table]);
-									if ($exist) {
-										// Get the subpart for table exists
-										$existSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($tableSubpart, '###EXIST###');
-										// Define the markers content
-										$existMarkers = array(
-											'tableExists' => 'Table exists!',
-											'backPath' => $this->backPath
-										);
-										// Fill the markers in the subpart
-										$existSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($existSubpart, $existMarkers, '###|###', TRUE, FALSE);
-									}
-									// Substitute the subpart for table exists
-									$tableHtml = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($tableSubpart, '###EXIST###', $existSubpart);
-									// Define the markers content
-									$tableMarkers = array(
-										'table' => $table,
-										'definition' => md5($definition),
-										'count' => $insertCount[$table] ? $insertCount[$table] : '',
-										'rowLabel' => $insertCount[$table] ? 'Rows: ' : '',
-										'tableExists' => 'Table exists!',
-										'backPath' => $this->backPath
-									);
-									// Fill the markers
-									$tables[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($tableHtml, $tableMarkers, '###|###', TRUE, FALSE);
-								}
-								// Substitute the subpart for the rows
-								$regularModeSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($regularModeSubpart, '###ROWS###', implode(LF, $tables));
-							}
-							// Substitute the subpart for the regular mode
-							$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###REGULARMODE###', $regularModeSubpart);
-							// Define the markers content
-							$contentMarkers = array(
-								'checked' => $this->mode == '123' || GeneralUtility::_GP('presetWholeTable') ? 'checked="checked"' : '',
-								'label' => 'Import the whole file \'' . basename($actionParts[1]) . '\' directly (ignores selections above)'
-							);
-							// Fill the markers
-							$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $contentMarkers, '###|###', TRUE, FALSE);
-							$form = $this->getUpdateDbFormWrap($action_type, $content);
-							$this->message($tLabel, 'Select tables to import', '
-									<p>
-										This is an overview of the CREATE TABLE
-										definitions in the SQL file.
-										<br />
-										Select which tables you want to dump to
-										the database.
-										<br />
-										Any table you choose dump to the
-										database is dropped from the database
-										first, so you\'ll lose all data in
-										existing tables.
-									</p>
-								' . $form, 1, 1);
-						} else {
-							$this->message($tLabel, 'No tables', '
-									<p>
-										There seems to be no CREATE TABLE
-										definitions in the SQL file.
-										<br />
-										This tool is intelligently creating one
-										table at a time and not just dumping the
-										whole content of the file uncritically.
-										That\'s why there must be defined tables
-										in the SQL file.
-									</p>
-								', 3, 1);
-						}
-					}
-				}
-				break;
-			case 'view':
-				if (@is_file($actionParts[1])) {
-					$tLabel = 'Import SQL dump';
-					// Getting statement array from
-					$fileContent = GeneralUtility::getUrl($actionParts[1]);
-					$statements = $this->sqlHandler->getStatementArray($fileContent, 1);
-					$maxL = 1000;
-					$strLen = strlen($fileContent);
-					$maxlen = 200 + ($maxL - \TYPO3\CMS\Core\Utility\MathUtility::forceIntegerInRange(($strLen - 20000) / 100, 0, $maxL));
-					if (count($statements)) {
-						$out = '';
-						foreach ($statements as $statement) {
-							$out .= '<p>' . nl2br(htmlspecialchars(GeneralUtility::fixed_lgd_cs($statement, $maxlen))) . '</p>';
-						}
-					}
-					$this->message($tLabel, 'Content of ' . basename($actionParts[1]), $out, 1);
-				}
-				break;
-			case 'adminUser':
-				if ($whichTables['be_users']) {
-					if (is_array($this->INSTALL['database_adminUser'])) {
-						$username = preg_replace('/[^\\da-z._-]/i', '', trim($this->INSTALL['database_adminUser']['username']));
-						$pass = trim($this->INSTALL['database_adminUser']['password']);
-						$pass2 = trim($this->INSTALL['database_adminUser']['password2']);
-						if ($username && $pass && $pass2) {
-							if ($pass != $pass2) {
-								$this->message($headCode, 'Passwords are not equal!', '
-										<p>
-											The passwords entered twice are not
-											equal.
-										</p>
-									', 2, 1);
-							} else {
-								$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid', 'be_users', 'username=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($username, 'be_users'));
-								if (!$GLOBALS['TYPO3_DB']->sql_num_rows($res)) {
-									$insertFields = array(
-										'username' => $username,
-										'password' => md5($pass),
-										'admin' => 1,
-										'uc' => '',
-										'fileoper_perms' => 0,
-										'tstamp' => $GLOBALS['EXEC_TIME'],
-										'crdate' => $GLOBALS['EXEC_TIME']
-									);
-									$result = $GLOBALS['TYPO3_DB']->exec_INSERTquery('be_users', $insertFields);
-									$this->isBasicComplete($headCode);
-									if ($result) {
-										$this->message($headCode, 'User created', '
-												<p>
-													Username:
-													<strong>' . htmlspecialchars($username) . '
-													</strong>
-												</p>
-											', 1, 1);
-									} else {
-										$this->message($headCode, 'User not created', '
-												<p>
-													Error:
-													<strong>' . htmlspecialchars($GLOBALS['TYPO3_DB']->sql_error()) . '
-													</strong>
-												</p>
-											', 3, 1);
-									}
-								} else {
-									$this->message($headCode, 'Username not unique!', '
-											<p>
-												The username,
-												<strong>' . htmlspecialchars($username) . '
-												</strong>
-												, was not unique.
-											</p>
-										', 2, 1);
-								}
-							}
-						} else {
-							$this->message($headCode, 'Missing data!', '
-									<p>
-										Not all required form fields have been
-										filled.
-									</p>
-								', 2, 1);
-						}
-					}
-					// Get the template file
-					$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'CheckTheDatabaseAdminUser.html'));
-					// Get the template part from the file
-					$content = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-					// Define the markers content
-					$contentMarkers = array(
-						'userName' => 'username - unique, no space, lowercase',
-						'password' => 'password',
-						'repeatPassword' => 'password (repeated)'
-					);
-					// Fill the markers
-					$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $contentMarkers, '###|###', TRUE, FALSE);
-					$form = $this->getUpdateDbFormWrap($action_type, $content);
-					$this->message($headCode, 'Create admin user', '
-							<p>
-								Enter username and password for a new admin
-								user.
-								<br />
-								You should use this function only if there are
-								no admin users in the database, for instance if
-								this is a blank database.
-								<br />
-								After you\'ve created the user, log in and add
-								the rest of the user information, like email and
-								real name.
-							</p>
-						' . $form, 0, 1);
-				} else {
-					$this->message($headCode, 'Required table not in database', '
-							<p>
-								\'be_users\' must be a table in the database!
-							</p>
-						', 3, 1);
-				}
-				break;
-			case 'UC':
-				if ($whichTables['be_users']) {
-					if (!strcmp($this->INSTALL['database_UC'], 1)) {
-						$GLOBALS['TYPO3_DB']->exec_UPDATEquery('be_users', '', array('uc' => ''));
-						$this->message($headCode, 'Clearing be_users.uc', '
-								<p>
-									Done.
-								</p>
-							', 1);
-					}
-					// Get the template file
-					$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'CheckTheDatabaseUc.html'));
-					// Get the template part from the file
-					$content = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-					// Define the markers content
-					$contentMarkers = array(
-						'clearBeUsers' => 'Clear be_users preferences ("uc" field)'
-					);
-					// Fill the markers
-					$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $contentMarkers, '###|###', TRUE, FALSE);
-					$form = $this->getUpdateDbFormWrap($action_type, $content);
-					$this->message($headCode, 'Clear user preferences', '
-							<p>
-								If you press this button all backend users from
-								the tables be_users will have their user
-								preferences cleared (field \'uc\' set to an
-								empty string).
-								<br />
-								This may come in handy in rare cases where that
-								configuration may be corrupt.
-								<br />
-								Clearing this will clear all user settings from
-								the \'Setup\' module.
-							</p>
-						' . $form);
-				} else {
-					$this->message($headCode, 'Required table not in database', '
-							<p>
-								\'be_users\' must be a table in the database!
-							</p>
-						', 3);
-				}
-				break;
-			case 'cache':
-				$tableListArr = explode(',', 'cache_pages,cache_pagesection,cache_hash,cache_imagesizes,--div--,sys_log,sys_history,--div--,be_sessions,fe_sessions,fe_session_data' . (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('indexed_search') ? ',--div--,index_words,index_rel,index_phash,index_grlist,index_section,index_fulltext' : '') . (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('tt_products') ? ',--div--,sys_products_orders,sys_products_orders_mm_tt_products' : '') . (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('direct_mail') ? ',--div--,sys_dmail_maillog' : ''));
-				if (is_array($this->INSTALL['database_clearcache'])) {
-					$qList = array();
-					// Get the template file
-					$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'CheckTheDatabaseCache.html'));
-					// Get the subpart for emptied tables
-					$emptiedTablesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###EMPTIEDTABLES###');
-					// Get the subpart for table
-					$tableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($emptiedTablesSubpart, '###TABLE###');
-					foreach ($tableListArr as $table) {
-						if ($table != '--div--') {
-							$table_c = TYPO3_OS == 'WIN' ? strtolower($table) : $table;
-							if ($this->INSTALL['database_clearcache'][$table] && $whichTables[$table_c]) {
-								$GLOBALS['TYPO3_DB']->exec_TRUNCATEquery($table);
-								// Define the markers content
-								$emptiedTablesMarkers = array(
-									'tableName' => $table
-								);
-								// Fill the markers in the subpart
-								$qList[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($tableSubpart, $emptiedTablesMarkers, '###|###', TRUE, FALSE);
-							}
-						}
-					}
-					// Substitute the subpart for table
-					$emptiedTablesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($emptiedTablesSubpart, '###TABLE###', implode(LF, $qList));
-					if (count($qList)) {
-						$this->message($headCode, 'Clearing cache', '
-								<p>
-									The following tables were emptied:
-								</p>
-							' . $emptiedTablesSubpart, 1);
-					}
-				}
-				// Count entries and make checkboxes
-				$labelArr = array(
-					'cache_pages' => 'Pages',
-					'cache_pagesection' => 'TS template related information',
-					'cache_hash' => 'Multipurpose md5-hash cache',
-					'cache_imagesizes' => 'Cached image sizes',
-					'sys_log' => 'Backend action logging',
-					'sys_history' => 'Addendum to the sys_log which tracks ALL changes to content through TCE. May become huge by time. Is used for rollback (undo) and the WorkFlow engine.',
-					'be_sessions' => 'Backend User sessions',
-					'fe_sessions' => 'Frontend User sessions',
-					'fe_session_data' => 'Frontend User sessions data',
-					'sys_dmail_maillog' => 'Direct Mail log',
-					'sys_products_orders' => 'tt_product orders',
-					'sys_products_orders_mm_tt_products' => 'relations between tt_products and sys_products_orders'
-				);
-				$countEntries = array();
-				reset($tableListArr);
-				// Get the template file
-				$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'CheckTheDatabaseCache.html'));
-				// Get the subpart for table list
-				$tableListSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TABLELIST###');
-				// Get the subpart for the group separator
-				$groupSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($tableListSubpart, '###GROUP###');
-				// Get the subpart for a single table
-				$singleTableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($tableListSubpart, '###SINGLETABLE###');
-				$checkBoxes = array();
-				foreach ($tableListArr as $table) {
-					if ($table != '--div--') {
-						$table_c = TYPO3_OS == 'WIN' ? strtolower($table) : $table;
-						if ($whichTables[$table_c]) {
-							$countEntries[$table] = $GLOBALS['TYPO3_DB']->exec_SELECTcountRows('*', $table);
-							// Checkboxes:
-							if ($this->INSTALL['database_clearcache'][$table] || $_GET['PRESET']['database_clearcache'][$table]) {
-								$checked = 'checked="checked"';
-							} else {
-								$checked = '';
-							}
-							// Define the markers content
-							$singleTableMarkers = array(
-								'table' => $table,
-								'checked' => $checked,
-								'count' => '(' . $countEntries[$table] . ' rows)',
-								'label' => $labelArr[$table]
-							);
-							// Fill the markers in the subpart
-							$checkBoxes[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($singleTableSubpart, $singleTableMarkers, '###|###', TRUE, FALSE);
-						}
-					} else {
-						$checkBoxes[] = $groupSubpart;
-					}
-				}
-				// Substitute the subpart for the single tables
-				$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($tableListSubpart, '###SINGLETABLE###', implode(LF, $checkBoxes));
-				// Substitute the subpart for the group separator
-				$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###GROUP###', '');
-				$form = $this->getUpdateDbFormWrap($action_type, $content);
-				$this->message($headCode, 'Clear out selected tables', '
-						<p>
-							Pressing this button will delete all records from
-							the selected tables.
-						</p>
-					' . $form);
-				break;
-			}
-		}
-		$this->output($this->outputWrapper($this->printAll()));
-	}
-
-	/**
-	 * Dispatches updates that shall be executed
-	 * during initialization of a fresh TYPO3 instance.
-	 *
-	 * @return void
-	 */
-	public function dispatchInitializeUpdates() {
-		/** @var $dispatcher \TYPO3\CMS\Install\Service\UpdateDispatcherService */
-		$dispatcher = GeneralUtility::makeInstance('TYPO3\CMS\Install\Service\UpdateDispatcherService', $this);
-		$dispatcher->dispatchInitializeUpdates();
-	}
-
-	/**
-	 * Generates update wizard
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function updateWizard() {
-		\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::removeCacheFiles();
-		// Forces creation / update of caching framework tables that are needed by some update wizards
-		$cacheTablesConfiguration = implode(LF, $this->sqlHandler->getStatementArray(\TYPO3\CMS\Core\Cache\Cache::getDatabaseTableDefinitions(), 1, '^CREATE TABLE '));
-		$neededTableDefinition = $this->sqlHandler->getFieldDefinitions_fileContent($cacheTablesConfiguration);
-		$currentTableDefinition = $this->sqlHandler->getFieldDefinitions_database();
-		$updateTableDefenition = $this->sqlHandler->getDatabaseExtra($neededTableDefinition, $currentTableDefinition);
-		$updateStatements = $this->sqlHandler->getUpdateSuggestions($updateTableDefenition);
-		if (isset($updateStatements['create_table']) && count($updateStatements['create_table']) > 0) {
-			$this->sqlHandler->performUpdateQueries($updateStatements['create_table'], $updateStatements['create_table']);
-		}
-		if (isset($updateStatements['add']) && count($updateStatements['add']) > 0) {
-			$this->sqlHandler->performUpdateQueries($updateStatements['add'], $updateStatements['add']);
-		}
-		if (isset($updateStatements['change']) && count($updateStatements['change']) > 0) {
-			$this->sqlHandler->performUpdateQueries($updateStatements['change'], $updateStatements['change']);
-		}
-		// call wizard
-		$action = $this->INSTALL['database_type'] ? $this->INSTALL['database_type'] : 'checkForUpdate';
-		$this->updateWizard_parts($action);
-		$this->output($this->outputWrapper($this->printAll()));
-	}
-
-	/**
-	 * Implements the steps for the update wizard
-	 *
-	 * @param string $action Which should be done.
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function updateWizard_parts($action) {
-		$content = '';
-		$updateItems = array();
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'UpdateWizardParts.html'));
-		switch ($action) {
-		case 'checkForUpdate':
-			// Get the subpart for check for update
-			$checkForUpdateSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###CHECKFORUPDATE###');
-			$title = 'Step 1 - Introduction';
-			$updateWizardBoxes = '';
-			if (!$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']) {
-				$updatesAvailableSubpart = '
-						<p>
-							<strong>
-								No updates registered!
-							</strong>
-						</p>
-					';
-			} else {
-				// step through list of updates, and check if update is needed and if yes, output an explanation
-				$updatesAvailableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($checkForUpdateSubpart, '###UPDATESAVAILABLE###');
-				$updateWizardBoxesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($updatesAvailableSubpart, '###UPDATEWIZARDBOXES###');
-				$singleUpdateWizardBoxSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($updateWizardBoxesSubpart, '###SINGLEUPDATEWIZARDBOX###');
-				$singleUpdate = array();
-				foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] as $identifier => $className) {
-					$tmpObj = $this->getUpgradeObjInstance($className, $identifier);
-					if ($tmpObj->shouldRenderWizard()) {
-						$explanation = '';
-						$tmpObj->checkForUpdate($explanation);
-						$updateMarkers = array(
-							'next' => '<button type="submit" name="TYPO3_INSTALL[update][###IDENTIFIER###]">
-						Next
-						<span class="t3-install-form-button-icon-positive">&nbsp;</span>
-					</button>',
-							'identifier' => $identifier,
-							'title' => $tmpObj->getTitle(),
-							'explanation' => $explanation
-						);
-						// only display the message, no button
-						if (!$tmpObj->shouldRenderNextButton()) {
-							$updateMarkers['next'] = '';
-						}
-						$singleUpdate[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($singleUpdateWizardBoxSubpart, $updateMarkers, '###|###', TRUE, FALSE);
-					}
-				}
-				if (!empty($singleUpdate)) {
-					$updateWizardBoxesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($updateWizardBoxesSubpart, '###SINGLEUPDATEWIZARDBOX###', implode(LF, $singleUpdate));
-					$updateWizardBoxesMarkers = array(
-						'action' => $this->action
-					);
-					$updateWizardBoxesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($updateWizardBoxesSubpart, $updateWizardBoxesMarkers, '###|###', TRUE, FALSE);
-				} else {
-					$updateWizardBoxesSubpart = '
-							<p>
-								<strong>
-									No updates to perform!
-								</strong>
-							</p>
-						';
-				}
-				$updatesAvailableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($updatesAvailableSubpart, '###UPDATEWIZARDBOXES###', $updateWizardBoxesSubpart);
-				$updatesAvailableMarkers = array(
-					'finalStep' => 'Final Step',
-					'finalStepExplanation' => '
-								<p>
-									When all updates are done you should check
-									your database for required updates.
-									<br />
-									Perform
-									<strong>
-										COMPARE DATABASE
-									</strong>
-									as often until no more changes are required.
-									<br />
-									<br />
-								</p>
-							',
-					'compareDatabase' => 'COMPARE DATABASE'
-				);
-				$updatesAvailableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($updatesAvailableSubpart, $updatesAvailableMarkers, '###|###', TRUE, FALSE);
-			}
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($checkForUpdateSubpart, '###UPDATESAVAILABLE###', $updatesAvailableSubpart);
-			break;
-		case 'getUserInput':
-			$title = 'Step 2 - Configuration of updates';
-			$getUserInputSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###GETUSERINPUT###');
-			$markers = array(
-				'introduction' => 'The following updates will be performed:',
-				'showDatabaseQueries' => 'Show database queries performed',
-				'performUpdates' => 'Perform updates!',
-				'action' => $this->action
-			);
-			if (!$this->INSTALL['update']) {
-				$noUpdatesAvailableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($getUserInputSubpart, '###NOUPDATESAVAILABLE###');
-				$noUpdateMarkers['noUpdates'] = 'No updates selected!';
-				$noUpdatesAvailableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($noUpdatesAvailableSubpart, $noUpdateMarkers, '###|###', TRUE, FALSE);
-				break;
-			} else {
-				// update methods might need to get custom data
-				$updatesAvailableSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($getUserInputSubpart, '###UPDATESAVAILABLE###');
-				$updateItems = array();
-				foreach ($this->INSTALL['update'] as $identifier => $tmp) {
-					$updateMarkers = array();
-					$className = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$identifier];
-					$tmpObj = $this->getUpgradeObjInstance($className, $identifier);
-					$updateMarkers['identifier'] = $identifier;
-					$updateMarkers['title'] = $tmpObj->getTitle();
-					if (method_exists($tmpObj, 'getUserInput')) {
-						$updateMarkers['identifierMethod'] = $tmpObj->getUserInput('TYPO3_INSTALL[update][' . $identifier . ']');
-					}
-					$updateItems[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($updatesAvailableSubpart, $updateMarkers, '###|###', TRUE, TRUE);
-				}
-				$updatesAvailableSubpart = implode(LF, $updateItems);
-			}
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($getUserInputSubpart, '###NOUPDATESAVAILABLE###', $noUpdatesAvailableSubpart);
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###UPDATESAVAILABLE###', $updatesAvailableSubpart);
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $markers, '###|###', TRUE, FALSE);
-			break;
-		case 'performUpdate':
-			// third step - perform update
-			$title = 'Step 3 - Perform updates';
-			$performUpdateSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###PERFORMUPDATE###');
-			$updateItemsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($performUpdateSubpart, '###UPDATEITEMS###');
-			$checkUserInputSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($updateItemsSubpart, '###CHECKUSERINPUT###');
-			$updatePerformedSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($updateItemsSubpart, '###UPDATEPERFORMED###');
-			$noPerformUpdateSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($updateItemsSubpart, '###NOPERFORMUPDATE###');
-			$databaseQueriesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($updatePerformedSubpart, '###DATABASEQUERIES###');
-			$customOutputSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($updatePerformedSubpart, '###CUSTOMOUTPUT###');
-			if (!$this->INSTALL['update']['extList']) {
-				break;
-			}
-			$GLOBALS['TYPO3_DB']->store_lastBuiltQuery = TRUE;
-			foreach ($this->INSTALL['update']['extList'] as $identifier) {
-				$className = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$identifier];
-				$tmpObj = $this->getUpgradeObjInstance($className, $identifier);
-				$updateItemsMarkers['identifier'] = $identifier;
-				$updateItemsMarkers['title'] = $tmpObj->getTitle();
-				// check user input if testing method is available
-				if (method_exists($tmpObj, 'checkUserInput') && !$tmpObj->checkUserInput($customOutput)) {
-					$customOutput = '';
-					$userInputMarkers = array(
-						'customOutput' => $customOutput ? $customOutput : 'Something went wrong',
-						'goBack' => 'Go back to update configuration'
-					);
-					$checkUserInput = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($checkUserInputSubpart, $userInputMarkers, '###|###', TRUE, FALSE);
-				} else {
-					if (method_exists($tmpObj, 'performUpdate')) {
-						$customOutput = '';
-						$dbQueries = array();
-						$databaseQueries = array();
-						if ($tmpObj->performUpdate($dbQueries, $customOutput)) {
-							$performUpdateMarkers['updateStatus'] = 'Update successful!';
-						} else {
-							$performUpdateMarkers['updateStatus'] = 'Update FAILED!';
-						}
-						if ($this->INSTALL['update']['showDatabaseQueries']) {
-							$content .= '<br />' . implode('<br />', $dbQueries);
-							foreach ($dbQueries as $query) {
-								$databaseQueryMarkers['query'] = $query;
-								$databaseQueries[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($databaseQueriesSubpart, $databaseQueryMarkers, '###|###', TRUE, FALSE);
-							}
-						}
-						if (strlen($customOutput)) {
-							$content .= '<br />' . $customOutput;
-							$customOutputMarkers['custom'] = $customOutput;
-							$customOutputItem = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($customOutputSubpart, $customOutputMarkers, '###|###', TRUE, FALSE);
-						}
-						$updatePerformed = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($updatePerformedSubpart, '###DATABASEQUERIES###', implode(LF, $databaseQueries));
-						$updatePerformed = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($updatePerformed, '###CUSTOMOUTPUT###', $customOutputItem);
-						$updatePerformed = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($updatePerformed, $performUpdateMarkers, '###|###', TRUE, FALSE);
-					} else {
-						$noPerformUpdateMarkers['noUpdateMethod'] = 'No update method available!';
-						$noPerformUpdate = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($noPerformUpdateSubpart, $noPerformUpdateMarkers, '###|###', TRUE, FALSE);
-					}
-				}
-				$updateItem = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($updateItemsSubpart, '###CHECKUSERINPUT###', $checkUserInput);
-				$updateItem = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($updateItem, '###UPDATEPERFORMED###', $updatePerformed);
-				$updateItem = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($updateItem, '###NOPERFORMUPDATE###', $noPerformUpdate);
-				$updateItem = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($updateItem, '###UPDATEITEMS###', implode(LF, $updateItems));
-				$updateItems[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($updateItem, $updateItemsMarkers, '###|###', TRUE, FALSE);
-			}
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($performUpdateSubpart, '###UPDATEITEMS###', implode(LF, $updateItems));
-			$GLOBALS['TYPO3_DB']->store_lastBuiltQuery = FALSE;
-			// also render the link to the next update wizard, if available
-			$nextUpdateWizard = $this->getNextUpdadeWizardInstance($tmpObj);
-			if ($nextUpdateWizard) {
-				$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, array('NEXTIDENTIFIER' => $nextUpdateWizard->getIdentifier()), '###|###', TRUE, FALSE);
-			} else {
-				// no next wizard, also hide the button to the next update wizard
-				$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###NEXTUPDATEWIZARD###', '');
-			}
-			break;
-		}
-		$this->message('Upgrade Wizard', $title, $content);
-	}
-
-	/**
-	 * Creates instance of an upgrade object, setting the pObj, versionNumber and pObj
-	 *
-	 * @param string $className The class name
-	 * @param string $identifier The identifier of upgrade object - needed to fetch user input
-	 * @return object Newly instantiated upgrade object
-	 * @todo Define visibility
-	 */
-	public function getUpgradeObjInstance($className, $identifier) {
-		$tmpObj = GeneralUtility::getUserObj($className);
-		$tmpObj->setIdentifier($identifier);
-		$tmpObj->versionNumber = \TYPO3\CMS\Core\Utility\VersionNumberUtility::convertVersionNumberToInteger(TYPO3_version);
-		$tmpObj->pObj = $this;
-		$tmpObj->userInput = $this->INSTALL['update'][$identifier];
-		return $tmpObj;
-	}
-
-	/**
-	 * Returns the next upgrade wizard object.
-	 *
-	 * Used to show the link/button to the next upgrade wizard
-	 *
-	 * @param 	object	$currentObj		current Upgrade Wizard Object
-	 * @return 	mixed	Upgrade Wizard instance or FALSE
-	 */
-	protected function getNextUpdadeWizardInstance($currentObj) {
-		$isPreviousRecord = TRUE;
-		foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] as $identifier => $className) {
-			// first, find the current update wizard, and then start validating the next ones
-			if ($currentObj->getIdentifier() == $identifier) {
-				$isPreviousRecord = FALSE;
-				continue;
-			}
-			if (!$isPreviousRecord) {
-				$nextUpdateWizard = $this->getUpgradeObjInstance($className, $identifier);
-				if ($nextUpdateWizard->shouldRenderWizard()) {
-					return $nextUpdateWizard;
-				}
-			}
-		}
-		return FALSE;
-	}
-
-	/**
-	 * Check if at lease one backend admin user has been created
-	 *
-	 * @return integer Amount of backend users in the database
-	 * @todo Define visibility
-	 */
-	public function isBackendAdminUser() {
-		return $GLOBALS['TYPO3_DB']->exec_SELECTcountRows('uid', 'be_users', 'admin=1');
-	}
-
-	/**
-	 * Check if the basic settings are complete
-	 * Only used by 1-2-3 mode
-	 *
-	 * @param string $tLabel The header for the message
-	 * @return boolean TRUE if complete
-	 * @todo Define visibility
-	 */
-	public function isBasicComplete($tLabel) {
-		if ($this->mode == '123') {
-			$tables = $this->sqlHandler->getListOfTables();
-			if (count($tables)) {
-				$beuser = $this->isBackendAdminUser();
-			}
-			if (count($tables) && $beuser) {
-				$mode123Imported = 1;
-				$this->message($tLabel, 'Basic Installation Completed', $this->messageBasicFinished(), -1, 1);
-				$this->message($tLabel, 'Security Risk!', $this->securityRisk() . $this->alterPasswordForm(), 2, 1);
-			} else {
-				$this->message($tLabel, 'Still missing something?', nl2br('
-				You may be missing one of these points before your TYPO3 installation is complete:
-
-				' . (count($tables) ? '' : '- You haven\'t imported any tables yet.
-				') . ($beuser ? '' : '- You haven\'t created an admin user yet.
-				') . '
-
-				You\'re about to import a database with a complete site in it, these three points should be met.
-				'), -1, 1);
-			}
-		}
-		return $mode123Imported;
-	}
-
-	/**
-	 * Generate the contents for the form for 'Database Analyzer'
-	 * when the 'COMPARE' still contains errors
-	 *
-	 * @param string $type get_form if the form needs to be generated
-	 * @param array $arr_update The tables/fields which needs an update
-	 * @param array $arr_remove The tables/fields which needs to be removed
-	 * @param string $action_type The action type
-	 * @return string HTML for the form
-	 * @todo Define visibility
-	 */
-	public function generateUpdateDatabaseForm($type, $arr_update, $arr_remove, $action_type) {
-		$content = '';
-		switch ($type) {
-		case 'get_form':
-			$content .= $this->generateUpdateDatabaseForm_checkboxes($arr_update['clear_table'], 'Clear tables (use with care!)', FALSE, TRUE);
-			$content .= $this->generateUpdateDatabaseForm_checkboxes($arr_update['add'], 'Add fields');
-			$content .= $this->generateUpdateDatabaseForm_checkboxes($arr_update['change'], 'Changing fields', \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('dbal') ? 0 : 1, 0, $arr_update['change_currentValue']);
-			$content .= $this->generateUpdateDatabaseForm_checkboxes($arr_remove['change'], 'Remove unused fields (rename with prefix)', $this->setAllCheckBoxesByDefault, 1);
-			$content .= $this->generateUpdateDatabaseForm_checkboxes($arr_remove['drop'], 'Drop fields (really!)', $this->setAllCheckBoxesByDefault);
-			$content .= $this->generateUpdateDatabaseForm_checkboxes($arr_update['create_table'], 'Add tables');
-			$content .= $this->generateUpdateDatabaseForm_checkboxes($arr_remove['change_table'], 'Removing tables (rename with prefix)', $this->setAllCheckBoxesByDefault, 1, $arr_remove['tables_count'], 1);
-			$content .= $this->generateUpdateDatabaseForm_checkboxes($arr_remove['drop_table'], 'Drop tables (really!)', $this->setAllCheckBoxesByDefault, 0, $arr_remove['tables_count'], 1);
-			$content = $this->getUpdateDbFormWrap($action_type, $content);
-			break;
-		default:
-			break;
-		}
-		return $content;
-	}
-
-	/**
-	 * Form wrap for 'Database Analyzer'
-	 * when the 'COMPARE' still contains errors
-	 *
-	 * @param string $action_type The action type
-	 * @param string $content The form content
-	 * @param string $label The submit button label
-	 * @return string HTML of the form
-	 * @todo Define visibility
-	 */
-	public function getUpdateDbFormWrap($action_type, $content, $label = 'Write to database') {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'GetUpdateDbFormWrap.html'));
-		// Get the template part from the file
-		$form = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Define the markers content
-		$formMarkers = array(
-			'action' => $this->action,
-			'actionType' => htmlspecialchars($action_type),
-			'content' => $content,
-			'label' => $label
-		);
-		// Fill the markers
-		$form = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($form, $formMarkers, '###|###', TRUE, FALSE);
-		return $form;
-	}
-
-	/**
-	 * Generates an HTML table for the setup of database tables
-	 * Used in 'Database analyzer > Compare with $TCA'
-	 *
-	 * @param array $arr Description of the table with fieldname and fieldcontent
-	 * @param boolean $pre TRUE if the field content needs to be wrapped with a <pre> tag
-	 * @param string $label The header label
-	 * @return string HTML of the table
-	 * @todo Define visibility
-	 */
-	public function displayFields($arr, $pre = 0, $label = '') {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'DisplayFields.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Define the markers content
-		$templateMarkers = array(
-			'headerFieldName' => 'Field name:',
-			'headerLabel' => $label ? $label : 'Info:'
-		);
-		if (is_array($arr)) {
-			$rows = array();
-			// Get the subpart for rows
-			$rowsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###ROWS###');
-			foreach ($arr as $fieldname => $fieldContent) {
-				if ($pre) {
-					$fieldContent = '<pre>' . trim($fieldContent) . '</pre>';
-				}
-				// Define the markers content
-				$rowsMarkers = array(
-					'fieldName' => $fieldname,
-					'fieldContent' => $fieldContent
-				);
-				// Fill the markers in the subpart
-				$rows[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($rowsSubpart, $rowsMarkers, '###|###', TRUE, FALSE);
-			}
-		}
-		// Substitute the subpart for rows
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###ROWS###', implode(LF, $rows));
-		// Fill the markers
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $templateMarkers, '###|###', TRUE, FALSE);
-		return $template;
-	}
-
-	/**
-	 * Generates an HTML table with comparison between database and $TCA
-	 * Used in 'Database analyzer > Compare with $TCA'
-	 *
-	 * @param array $arr Description of the table with fieldname and fieldcontent
-	 * @param array $arr_db The actual content of a field in the database
-	 * @return string HTML of the table
-	 * @todo Define visibility
-	 */
-	public function displayFieldComp($arr, $arr_db) {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'DisplayFieldComp.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Define the markers content
-		$templateMarkers = array(
-			'headerFieldName' => 'Field name:',
-			'headerSuggested' => 'Suggested value from $TCA:',
-			'headerActual' => 'Actual value from database:'
-		);
-		$rows = array();
-		if (is_array($arr)) {
-			// Get the subpart for rows
-			$rowsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###ROWS###');
-			foreach ($arr as $fieldname => $fieldContent) {
-				// This tries to equalize the types tinyint and int
-				$str1 = $fieldContent;
-				$str2 = trim($arr_db[$fieldname]);
-				$str1 = str_replace('tinyint(3)', 'tinyint(4)', $str1);
-				$str2 = str_replace('tinyint(3)', 'tinyint(4)', $str2);
-				$str1 = str_replace('int(10)', 'int(11)', $str1);
-				$str2 = str_replace('int(10)', 'int(11)', $str2);
-				// Compare:
-				if (strcmp($str1, $str2)) {
-					$bgcolor = ' class="warning"';
-				} else {
-					$bgcolor = '';
-				}
-				// Define the markers content
-				$rowsMarkers = array(
-					'fieldName' => $fieldname,
-					'fieldContent' => $fieldContent,
-					'fieldContentDb' => $arr_db[$fieldname],
-					'class' => $bgcolor
-				);
-				// Fill the markers in the subpart
-				$rows[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($rowsSubpart, $rowsMarkers, '###|###', TRUE, FALSE);
-			}
-		}
-		// Substitute the subpart for rows
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###ROWS###', implode(LF, $rows));
-		// Fill the markers
-		$out = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $templateMarkers, '###|###', TRUE, FALSE);
-		return $out;
-	}
-
-	/**
-	 * Generates an HTML table with $TCA suggestions looking at the type of field
-	 * Used in 'Database analyzer > Compare with $TCA'
-	 *
-	 * @param array $arr Description of the table with fieldname and fieldcontent
-	 * @param string $excludeList Comma separated list of fields which should be excluded from this table
-	 * @return string HTML of the table
-	 * @todo Define visibility
-	 */
-	public function displaySuggestions($arr, $excludeList = '') {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'DisplaySuggestions.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		$templateMarkers = array();
-		$fC = 0;
-		$rows = array();
-		if (is_array($arr)) {
-			// Get the subpart for rows
-			$rowsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###ROWS###');
-			foreach ($arr as $fieldname => $fieldContent) {
-				if (!GeneralUtility::inList($excludeList, $fieldname) && substr($fieldname, 0, strlen($this->sqlHandler->getDeletedPrefixKey())) != $this->sqlHandler->getDeletedPrefixKey() && substr($fieldname, -1) != '.') {
-					if ($arr[$fieldname . '.']) {
-						// Get the subpart for pre
-						$preSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($rowsSubpart, '###PRE###');
-						// Define the markers content
-						$preMarkers = array(
-							'code' => '<pre>' . trim($arr[($fieldname . '.')]) . '</pre>'
-						);
-						// Fill the markers in the subpart
-						$preSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($preSubpart, $preMarkers, '###|###', TRUE, FALSE);
-					}
-					// Substitute the subpart for pre
-					$row = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($rowsSubpart, '###PRE###', $preSubpart);
-					// Define the markers content
-					$rowsMarkers = array(
-						'headerFieldName' => 'Field name:',
-						'headerLabel' => 'Info:',
-						'headerSuggestion' => 'Suggestion for the field:',
-						'fieldName' => $fieldname,
-						'fieldContent' => $fieldContent
-					);
-					// Fill the markers in the subpart
-					$rows[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($row, $rowsMarkers, '###|###', TRUE, FALSE);
-					$fC++;
-				}
-			}
-		}
-		// Substitute the subpart for rows
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###ROWS###', implode(LF, $rows));
-		// Fill the markers
-		$out = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $templateMarkers, '###|###', TRUE, FALSE);
-		return array($out, $fC);
-	}
-
-	/**
-	 * Compares an array with field definitions with $TCA array
-	 *
-	 * @param array $FDsrc Field definition source
-	 * @param array $TCA The TCA array
-	 * @param boolean $onlyFields
-	 * @return array
-	 * @todo Define visibility
-	 */
-	public function compareDatabaseAndTCA($FDsrc, $TCA, $onlyFields = 0) {
-		$extraArr = array();
-		if (is_array($FDsrc)) {
-			foreach ($FDsrc as $table => $info) {
-				if (!isset($TCA[$table])) {
-					if (!$onlyFields) {
-						// If the table was not in the FDcomp-array, the result array is loaded with that table.
-						$extraArr[$table] = $info;
-						$extraArr[$table]['whole_table'] = 1;
-						unset($extraArr[$table]['keys']);
-					}
-				} else {
-					$theKey = 'fields';
-					$excludeListArr = array();
-					if (is_array($TCA[$table]['ctrl']['enablecolumns'])) {
-						$excludeListArr[] = $TCA[$table]['ctrl']['enablecolumns'];
-					}
-					$excludeListArr[] = $TCA[$table]['ctrl']['tstamp'];
-					$excludeListArr[] = $TCA[$table]['ctrl']['sortby'];
-					$excludeListArr[] = $TCA[$table]['ctrl']['delete'];
-					$excludeListArr[] = $TCA[$table]['ctrl']['cruser_id'];
-					$excludeListArr[] = $TCA[$table]['ctrl']['crdate'];
-					$excludeListArr[] = 'uid';
-					$excludeListArr[] = 'pid';
-					if ($table == 'pages') {
-						$excludeListArr[] = 'perms_userid';
-						$excludeListArr[] = 'perms_groupid';
-						$excludeListArr[] = 'perms_user';
-						$excludeListArr[] = 'perms_group';
-						$excludeListArr[] = 'perms_everybody';
-					}
-					if ($table == 'sys_dmail') {
-						$excludeListArr[] = 'scheduled';
-						$excludeListArr[] = 'scheduled_begin';
-						$excludeListArr[] = 'scheduled_end';
-						$excludeListArr[] = 'query_info';
-					}
-					if (is_array($info[$theKey])) {
-						foreach ($info[$theKey] as $fieldN => $fieldC) {
-							if (!isset($TCA[$table]['columns'][$fieldN]) && !in_array($fieldN, $excludeListArr)) {
-								$extraArr[$table][$theKey][$fieldN] = $info['fields'][$fieldN];
-								$extraArr[$table][$theKey][$fieldN . '.'] = $this->suggestTCAFieldDefinition($fieldN, $fieldC);
-							}
-						}
-					}
-				}
-			}
-		}
-		return array('extra' => $extraArr);
-	}
-
-	/**
-	 * Compares the $TCA array with a field definition array
-	 *
-	 * @param array $TCA The TCA
-	 * @param array $FDcomp Field definition comparison
-	 * @return array
-	 * @todo Define visibility
-	 */
-	public function compareTCAandDatabase($TCA, $FDcomp) {
-		$matchingArr = ($extraArr = array());
-		if (is_array($TCA)) {
-			foreach ($TCA as $table => $info) {
-				if (!isset($FDcomp[$table])) {
-					// If the table was not in the FDcomp-array, the result array is loaded with that table.
-					$extraArr[$table]['whole_table'] = 1;
-				} else {
-					foreach ($info['columns'] as $fieldN => $fieldC) {
-						$fieldDef = $this->suggestFieldDefinition($fieldC);
-						if (!is_array($fieldDef)) {
-							if (!isset($FDcomp[$table]['fields'][$fieldN])) {
-								$extraArr[$table]['fields'][$fieldN] = $fieldDef;
-							} else {
-								$matchingArr[$table]['fields'][$fieldN] = $fieldDef;
-							}
-						}
-					}
-				}
-			}
-		}
-		return array('extra' => $extraArr, 'matching' => $matchingArr);
-	}
-
-	/**
-	 * Suggests a field definition for a TCA config array.
-	 *
-	 * @param array $fieldInfo Info of a field
-	 * @return string The suggestion
-	 * @todo Define visibility
-	 */
-	public function suggestFieldDefinition($fieldInfo) {
-		$out = '';
-		switch ($fieldInfo['config']['type']) {
-		case 'input':
-			if (preg_match('/date|time|int|year/', $fieldInfo['config']['eval'])) {
-				$out = 'int(11) NOT NULL default \'0\'';
-			} else {
-				$max = intval($fieldInfo['config']['max']);
-				if ($max > 0 && $max < 200) {
-					$out = 'varchar(' . $max . ') NOT NULL default \'\'';
-				} else {
-					$out = 'tinytext';
-				}
-			}
-			break;
-		case 'text':
-			$out = 'text';
-			break;
-		case 'check':
-			if (is_array($fieldInfo['config']['items']) && count($fieldInfo['config']['items']) > 8) {
-				$out = 'int(11) NOT NULL default \'0\'';
-			} else {
-				$out = 'tinyint(3) NOT NULL default \'0\'';
-			}
-			break;
-		case 'radio':
-			if (is_array($fieldInfo['config']['items'])) {
-				$out = $this->getItemArrayType($fieldInfo['config']['items']);
-			} else {
-				$out = 'ERROR: Radiobox did not have items!';
-			}
-			break;
-		case 'group':
-			if ($fieldInfo['config']['internal_type'] == 'db') {
-				$max = \TYPO3\CMS\Core\Utility\MathUtility::forceIntegerInRange($fieldInfo['config']['maxitems'], 1, 10000);
-				if (count(explode(',', $fieldInfo['config']['allowed'])) > 1) {
-					// Tablenames are 10, "_" 1, uid's 5, comma 1
-					$len = $max * (10 + 1 + 5 + 1);
-					$out = $this->getItemBlobSize($len);
-				} elseif ($max <= 1) {
-					$out = 'int(11) NOT NULL default \'0\'';
-				} else {
-					// uid's 5, comma 1
-					$len = $max * (5 + 1);
-					$out = $this->getItemBlobSize($len);
-				}
-			}
-			if ($fieldInfo['config']['internal_type'] == 'file') {
-				$max = \TYPO3\CMS\Core\Utility\MathUtility::forceIntegerInRange($fieldInfo['config']['maxitems'], 1, 10000);
-				// Filenames is 30+ chars....
-				$len = $max * (30 + 1);
-				$out = $this->getItemBlobSize($len);
-			}
-			break;
-		case 'select':
-			$max = \TYPO3\CMS\Core\Utility\MathUtility::forceIntegerInRange($fieldInfo['config']['maxitems'], 1, 10000);
-			if ($max <= 1) {
-				if ($fieldInfo['config']['foreign_table']) {
-					$out = 'int(11) NOT NULL default \'0\'';
-				} else {
-					$out = $this->getItemArrayType($fieldInfo['config']['items']);
-				}
-			} else {
-				// five chars (special=10) + comma:
-				$len = $max * (($fieldInfo['config']['special'] ? 10 : 5) + 1);
-				$out = $this->getItemBlobSize($len);
-			}
-			break;
-		default:
-			break;
-		}
-		return $out ? $out : $fieldInfo;
-	}
-
-	/**
-	 * Check if field needs to be varchar or int
-	 * Private
-	 *
-	 * @param array $arr
-	 * @return string The definition
-	 * @todo Define visibility
-	 */
-	public function getItemArrayType($arr) {
-		if (is_array($arr)) {
-			$type[] = ($intSize[] = 0);
-			foreach ($arr as $item) {
-				if (!\TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($item[1]) && $item[1] != '--div--') {
-					$type[] = strlen($item[1]);
-				} else {
-					$intSize[] = $item[1];
-				}
-			}
-			$us = min($intSize) >= 0 ? ' unsigned' : '';
-			if (max($type) > 0) {
-				$out = 'varchar(' . max($type) . ') NOT NULL default \'\'';
-			} else {
-				$out = 'int(11) NOT NULL default \'0\'';
-			}
-		}
-		return $out;
-	}
-
-	/**
-	 * Defines the blob size of an item by a given length
-	 * Private
-	 *
-	 * @param integer $len The length
-	 * @return string The blob definition
-	 * @todo Define visibility
-	 */
-	public function getItemBlobSize($len) {
-		return ($len > 255 ? 'tiny' : '') . 'blob';
-	}
-
-	/**
-	 * Should suggest a TCA configuration for a specific field.
-	 *
-	 * @param string $fieldName The field name
-	 * @param string $fieldInfo The field information
-	 * @return string Suggested TCA configuration
-	 * @todo Define visibility
-	 */
-	public function suggestTCAFieldDefinition($fieldName, $fieldInfo) {
-		list($type, $len) = preg_split('/ |\\(|\\)/', $fieldInfo, 3);
-		switch ($type) {
-		case 'int':
-			$out = '
-\'' . $fieldName . '\' => array (
-	\'label\' => \'' . strtoupper($fieldName) . ':\',
-	\'exclude\' => 0,
-	\'config\' => array (
-		\'type\' => \'input\',
-		\'size\' => \'8\',
-		\'max\' => \'20\',
-		\'eval\' => \'date\',
-		\'default\' => \'0\',
-		\'checkbox\' => \'0\'
-	)
-),
-
------ OR -----
-
-\'' . $fieldName . '\' => array (
-	\'label\' => \'' . strtoupper($fieldName) . ':\',
-	\'exclude\' => 0,
-	\'config\' => array (
-		\'type\' => \'select\',
-		\'items\' => array (
-			array(\'[nothing]\', 0),
-			array(\'Extra choice! Only negative values here.\', -1),
-			array(\'__Divider:__\', \'--div--\')
-		),
-		\'foreign_table\' => \'[some_table_name]\'
-	)
-),';
-			break;
-		case 'varchar':
-			if ($len > 10) {
-				$out = '
-\'' . $fieldName . '\' => array (
-	\'label\' => \'' . strtoupper($fieldName) . ':\',
-	\'exclude\' => 0,
-	\'config\' => array (
-		\'type\' => \'input\',
-		\'size\' => \'8\',
-		\'max\' => \'' . $len . '\',
-		\'eval\' => \'trim\',
-		\'default\' => \'\'
-	)
-),';
-			} else {
-				$out = '
-\'' . $fieldName . '\' => array (
-	\'label\' => \'' . strtoupper($fieldName) . ':\',
-	\'exclude\' => 0,
-	\'config\' => array (
-		\'type\' => \'select\',
-		\'items\' => array (
-			array(\'Item number 1\', \'key1\'),
-			array(\'Item number 2\', \'key2\'),
-			array(\'-----\', \'--div--\'),
-			array(\'Item number 3\', \'key3\')
-		),
-		\'default\' => \'1\'
-	)
-),';
-			}
-			break;
-		case 'tinyint':
-			$out = '
-\'' . $fieldName . '\' => array (
-	\'label\' => \'' . strtoupper($fieldName) . ':\',
-	\'exclude\' => 0,
-	\'config\' => array (
-		\'type\' => \'select\',
-		\'items\' => array (
-			array(\'Item number 1\', \'1\'),
-			array(\'Item number 2\', \'2\'),
-			array(\'-----\', \'--div--\'),
-			array(\'Item number 3\', \'3\')
-		),
-		\'default\' => \'1\'
-	)
-),
-
------ OR -----
-
-\'' . $fieldName . '\' => array (
-	\'label\' => \'' . strtoupper($fieldName) . ':\',
-	\'exclude\' => 0,
-	\'config\' => array (
-		\'type\' => \'check\',
-		\'default\' => \'1\'
-	)
-),';
-			break;
-		case 'tinytext':
-			$out = '
-\'' . $fieldName . '\' => array (
-	\'label\' => \'' . strtoupper($fieldName) . ':\',
-	\'exclude\' => 0,
-	\'config\' => array (
-		\'type\' => \'input\',
-		\'size\' => \'40\',
-		\'max\' => \'255\',
-		\'eval\' => \'\',
-		\'default\' => \'\'
-	)
-),';
-			break;
-		case 'text':
-
-		case 'mediumtext':
-			$out = '
-\'' . $fieldName . '\' => array (
-	\'label\' => \'' . strtoupper($fieldName) . ':\',
-	\'config\' => array (
-		\'type\' => \'text\',
-		\'cols\' => \'48\',
-		\'rows\' => \'5\'
-	)
-),';
-			break;
-		default:
-			$out = '
-\'' . $fieldName . '\' => array (
-	\'label\' => \'' . strtoupper($fieldName) . ':\',
-	\'exclude\' => 0,
-	\'config\' => array (
-		\'type\' => \'input\',
-		\'size\' => \'30\',
-		\'max\' => \'\',
-		\'eval\' => \'\',
-		\'default\' => \'\'
-	)
-),';
-			break;
-		}
-		return $out ? $out : $fieldInfo;
-	}
-
-	/**
-	 * Includes TCA
-	 *
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function includeTCA() {
-		\TYPO3\CMS\Core\Core\Bootstrap::getInstance()->loadExtensionTables(FALSE);
-	}
-
-	/**********************
-	 *
-	 * GENERAL FUNCTIONS
-	 *
-	 **********************/
-	/**
-	 * Setting a message in the message-log and sets the fatalError flag if error type is 3.
-	 *
-	 * @param string $head Section header
-	 * @param string $short_string A short description
-	 * @param string $long_string A long (more detailed) description
-	 * @param integer $type -1=OK sign, 0=message, 1=notification, 2=warning, 3=error
-	 * @param boolean $force Print message also in "Advanced" mode (not only in 1-2-3 mode)
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function message($head, $short_string = '', $long_string = '', $type = 0, $force = 0) {
-		// Return directly if mode-123 is enabled.
-		if (!$force && $this->mode == '123' && $type < 2) {
-			return;
-		}
-		if ($type == 3) {
-			$this->fatalError = 1;
-		}
-		$long_string = trim($long_string);
-		if (!$this->silent) {
-			$this->printSection($head, $short_string, $long_string, $type);
-		}
-	}
-
-	/**
-	 * This "prints" a section with a message to the ->sections array
-	 *
-	 * @param string $head Section header
-	 * @param string $short_string A short description
-	 * @param string $long_string A long (more detailed) description
-	 * @param integer $type -1=OK sign, 0=message, 1=notification, 2=warning , 3=error
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function printSection($head, $short_string, $long_string, $type) {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'PrintSection.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		switch ($type) {
-		case 3:
-			$messageType = 'message-error';
-			break;
-		case 2:
-			$messageType = 'message-warning';
-			break;
-		case 1:
-			$messageType = 'message-notice';
-			break;
-		case 0:
-			$messageType = 'message-information';
-			break;
-		case -1:
-			$messageType = 'message-ok';
-			break;
-		}
-		if (!trim($short_string)) {
-			$content = '';
-		} else {
-			if (trim($long_string)) {
-				// Get the subpart for the long string
-				$longStringSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###LONGSTRINGAVAILABLE###');
-			}
-			// Substitute the subpart for the long string
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###LONGSTRINGAVAILABLE###', $longStringSubpart);
-			// Define the markers content
-			$markers = array(
-				'messageType' => $messageType,
-				'shortString' => $short_string,
-				'longString' => $long_string
-			);
-			// Fill the markers
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $markers, '###|###', TRUE, FALSE);
-		}
-		$this->sections[$head][] = $content;
-	}
-
-	/**
-	 * This prints all the messages in the ->section array
-	 *
-	 * @return string HTML of all the messages
-	 * @todo Define visibility
-	 */
-	public function printAll() {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'PrintAll.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		$sections = array();
-		foreach ($this->sections as $header => $valArray) {
-			// Get the subpart for sections
-			$sectionSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###SECTIONS###');
-			// Define the markers content
-			$sectionMarkers = array(
-				'header' => $header . ':',
-				'sectionContent' => implode(LF, $valArray)
-			);
-			// Fill the markers in the subpart
-			$sections[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($sectionSubpart, $sectionMarkers, '###|###', TRUE, FALSE);
-		}
-		// Substitute the subpart for the sections
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###SECTIONS###', implode(LF, $sections));
-		return $content;
-	}
-
-	/**
-	 * This wraps and returns the main content of the page into proper html-code.
-	 *
-	 * @param string $content The page content
-	 * @return string The full HTML page
-	 * @todo Define visibility
-	 */
-	public function outputWrapper($content) {
-		// Get the template file
-		if (!$this->passwordOK) {
-			$this->template = @file_get_contents((PATH_site . $this->templateFilePath . 'Install_login.html'));
-		} elseif ($this->mode == '123') {
-			$this->template = @file_get_contents((PATH_site . $this->templateFilePath . 'Install_123.html'));
-		} else {
-			$this->template = @file_get_contents((PATH_site . $this->templateFilePath . 'Install.html'));
-		}
-		// Add jQuery to javascript array for output
-		$this->javascript[] = '<script type="text/javascript" src="' . GeneralUtility::createVersionNumberedFilename('../contrib/jquery/jquery-1.9.1.min.js') . '"></script>';
-		// Add JS functions for output
-		$this->javascript[] = '<script type="text/javascript" src="' . GeneralUtility::createVersionNumberedFilename('../sysext/install/Resources/Public/Javascript/install.js') . '"></script>';
-		// Include the default stylesheets
-		$this->stylesheets[] = '<link rel="stylesheet" type="text/css" href="' . GeneralUtility::createVersionNumberedFilename(($this->backPath . 'sysext/install/Resources/Public/Stylesheets/reset.css')) . '" />';
-		$this->stylesheets[] = '<link rel="stylesheet" type="text/css" href="' . GeneralUtility::createVersionNumberedFilename(($this->backPath . 'sysext/install/Resources/Public/Stylesheets/general.css')) . '" />';
-		// Get the browser info
-		$browserInfo = \TYPO3\CMS\Core\Utility\ClientUtility::getBrowserInfo(GeneralUtility::getIndpEnv('HTTP_USER_AGENT'));
-		// Add the stylesheet for Internet Explorer
-		if ($browserInfo['browser'] === 'msie') {
-			// IE7
-			if (intval($browserInfo['version']) === 7) {
-				$this->stylesheets[] = '<link rel="stylesheet" type="text/css" href="' . GeneralUtility::createVersionNumberedFilename(($this->backPath . 'sysext/install/Resources/Public/Stylesheets/ie7.css')) . '" />';
-			}
-		}
-		// Include the stylesheets based on screen
-		if ($this->mode == '123') {
-			$this->stylesheets[] = '<link rel="stylesheet" type="text/css" href="' . GeneralUtility::createVersionNumberedFilename(($this->backPath . 'sysext/install/Resources/Public/Stylesheets/install_123.css')) . '" />';
-		} elseif ($this->passwordOK) {
-			$this->stylesheets[] = '<link rel="stylesheet" type="text/css" href="' . GeneralUtility::createVersionNumberedFilename(($this->backPath . 'sysext/install/Resources/Public/Stylesheets/install.css')) . '" />';
-		} else {
-			$this->stylesheets[] = '<link rel="stylesheet" type="text/css" href="' . GeneralUtility::createVersionNumberedFilename(($this->backPath . 'sysext/install/Resources/Public/Stylesheets/install.css')) . '" />';
-			$this->stylesheets[] = '<link rel="stylesheet" type="text/css" href="' . GeneralUtility::createVersionNumberedFilename(($this->backPath . 'sysext/install/Resources/Public/Stylesheets/install_login.css')) . '" />';
-		}
-		// Define the markers content
-		if ($this->mode == '123') {
-			$this->markers['headTitle'] = 'Installing TYPO3 ' . TYPO3_branch;
-		} else {
-			$this->markers['headTitle'] = '
-				TYPO3 ' . TYPO3_version . '
-				Install Tool on site: ' . htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']) . '
-			';
-		}
-		$this->markers['title'] = 'TYPO3 ' . TYPO3_version;
-		$this->markers['javascript'] = implode(LF, $this->javascript);
-		$this->markers['stylesheets'] = implode(LF, $this->stylesheets);
-		$this->markers['llErrors'] = 'The following errors occured';
-		$this->markers['copyright'] = $this->copyright();
-		$this->markers['charset'] = 'utf-8';
-		$this->markers['backendUrl'] = '../index.php';
-		$this->markers['backend'] = 'Backend admin';
-		$this->markers['frontendUrl'] = '../../index.php';
-		$this->markers['frontend'] = 'Frontend website';
-		$this->markers['metaCharset'] = 'Content-Type" content="text/html; charset=';
-		$this->markers['metaCharset'] .= 'utf-8';
-		// Add the error messages
-		if (!empty($this->errorMessages)) {
-			// Get the subpart for all error messages
-			$errorMessagesSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($this->template, '###ERRORMESSAGES###');
-			// Get the subpart for a single error message
-			$errorMessageSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($errorMessagesSubPart, '###MESSAGES###');
-			$errors = array();
-			foreach ($this->errorMessages as $errorMessage) {
-				// Define the markers content
-				$errorMessageMarkers = array(
-					'message' => $errorMessage
-				);
-				// Fill the markers in the subpart
-				$errors[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($errorMessageSubPart, $errorMessageMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for a single message
-			$errorMessagesSubPart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($errorMessagesSubPart, '###MESSAGES###', implode(LF, $errors));
-		}
-		// Version subpart is only allowed when password is ok
-		if ($this->passwordOK) {
-			// Get the subpart for the version
-			$versionSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($this->template, '###VERSIONSUBPART###');
-			// Define the markers content
-			$versionSubPartMarkers['version'] = 'Version: ' . TYPO3_version;
-			// Fill the markers in the subpart
-			$versionSubPart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($versionSubPart, $versionSubPartMarkers, '###|###', TRUE, FALSE);
-		}
-		// Substitute the version subpart
-		$this->template = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($this->template, '###VERSIONSUBPART###', $versionSubPart);
-		// Substitute the menu subpart
-		$this->template = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($this->template, '###MENU###', $this->menu());
-		// Substitute the error messages subpart
-		$this->template = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($this->template, '###ERRORMESSAGES###', $errorMessagesSubPart);
-		// Substitute the content subpart
-		$this->template = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($this->template, '###CONTENT###', $content);
-		// Fill the markers
-		$this->template = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($this->template, $this->markers, '###|###', TRUE, FALSE);
-		return $this->template;
-	}
-
-	/**
-	 * Outputs an error and dies.
-	 * Should be used by all errors that occur before even starting the install tool process.
-	 *
-	 * @param string $content The content of the error
-	 * @param string $title The title of the page
-	 * @return void
-	 */
-	protected function outputErrorAndExit($content, $title = 'Install Tool error') {
-		// Define the stylesheet
-		$stylesheet = '<link rel="stylesheet" type="text/css" href="' . '../stylesheets/install/install.css" />';
-		$javascript = '<script type="text/javascript" src="' . '../contrib/jquery/jquery-1.9.1.min.js"></script>' . LF;
-		$javascript .= '<script type="text/javascript" src="' . '../sysext/install/Resources/Public/Javascript/install.js"></script>';
-		// Get the template file
-		$template = @file_get_contents(PATH_site . 'typo3/sysext/install/Resources/Private/Templates/Notice.html');
-		// Define the markers content
-		$markers = array(
-			'styleSheet' => $stylesheet,
-			'javascript' => $javascript,
-			'title' => $title,
-			'content' => $content
-		);
-		// Fill the markers
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $markers, '###|###', 1, 1);
-		// Output the warning message and exit
-		header('Content-Type: text/html; charset=utf-8');
-		header('Cache-Control: no-cache, must-revalidate');
-		header('Pragma: no-cache');
-		echo $content;
-		die;
-	}
-
-	/**
-	 * Sends the page to the client.
-	 *
-	 * @param string $content The HTML page
-	 * @return void
-	 * @todo Define visibility
-	 */
-	public function output($content) {
-		header('Content-Type: text/html; charset=utf-8');
-		echo $content;
-	}
-
-	/**
-	 * Generates the main menu
-	 *
-	 * @return string HTML of the main menu
-	 * @todo Define visibility
-	 */
-	public function menu() {
-		if ($this->mode != '123') {
-			if (!$this->passwordOK) {
-				return;
-			}
-			$c = 0;
-			$items = array();
-			// Get the subpart for the main menu
-			$menuSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($this->template, '###MENU###');
-			// Get the subpart for each single menu item
-			$menuItemSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($this->template, '###MENUITEM###');
-			foreach ($this->menuitems as $k => $v) {
-				// Define the markers content
-				$markers = array(
-					'class' => $this->INSTALL['type'] == $k ? 'class="act"' : '',
-					'id' => 't3-install-menu-' . $k,
-					'url' => htmlspecialchars($this->scriptSelf . '?TYPO3_INSTALL[type]=' . $k . ($this->mode ? '&mode=' . rawurlencode($this->mode) : '')),
-					'item' => $v
-				);
-				// Fill the markers in the subpart
-				$items[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($menuItemSubPart, $markers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for the single menu items
-			$menuSubPart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($menuSubPart, '###MENUITEM###', implode(LF, $items));
-			return $menuSubPart;
-		}
-	}
-
-	/**
-	 * Generates the step header for 1-2-3 mode, the numbers at the top
-	 *
-	 * @return string HTML for the step header
-	 * @todo Define visibility
-	 */
-	public function stepHeader() {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'StepHeader.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Get the subpart for each item
-		$stepItemSubPart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($template, '###STEPITEM###');
-		$steps = array();
-		for ($counter = 2; $counter <= $this->totalSteps; $counter++) {
-			$state = '';
-			if ($this->step === $counter) {
-				$state = 'act';
-			} elseif ($this->step === 'go' || $counter < $this->step) {
-				$state = 'done';
-			}
-			// Define the markers content
-			$stepItemMarkers = array(
-				'class' => 'class="step' . ($counter - 1) . ($state ? ' ' . $state : '') . '"',
-				'url' => $this->scriptSelf . '?mode=' . $this->mode . '&amp;step=' . $counter,
-				'step' => $counter
-			);
-			// Fill the markers in the subpart
-			$steps[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($stepItemSubPart, $stepItemMarkers, '###|###', TRUE, FALSE);
-		}
-		// Substitute the subpart for the items
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($template, '###STEPITEM###', implode(LF, $steps));
-		return $content;
-	}
-
-	/**
-	 * Generate HTML for the security risk message
-	 *
-	 * @return string HTML for the security risk message
-	 * @todo Define visibility
-	 */
-	public function securityRisk() {
-		return '
-			<p>
-				<strong>An unsecured Install Tool presents a security risk.</strong>
-				Minimize the risk with the following actions:
-			</p>
-			<ul>
-				<li>
-					Change the Install Tool password.
-				</li>
-				<li>
-					Delete the ENABLE_INSTALL_TOOL file in the /typo3conf folder. This can be done
-					manually or through User tools &gt; User settings in the backend.
-				</li>
-				<li>
-					For additional security, the /typo3/install/ folder can be
-					renamed, deleted, or password protected with a .htaccess file.
-				</li>
-			</ul>
-		';
-	}
-
-	/**
-	 * Generates the form to alter the password of the Install Tool
-	 *
-	 * @return string HTML of the form
-	 * @todo Define visibility
-	 */
-	public function alterPasswordForm() {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'AlterPasswordForm.html'));
-		// Get the template part from the file
-		$template = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-		// Define the markers content
-		$markers = array(
-			'action' => $this->scriptSelf . '?TYPO3_INSTALL[type]=extConfig',
-			'enterPassword' => 'Enter new password:',
-			'enterAgain' => 'Enter again:',
-			'submit' => 'Set new password',
-			'formToken' => $this->formProtection->generateToken('installToolPassword', 'change')
-		);
-		// Fill the markers
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($template, $markers, '###|###', TRUE, FALSE);
-		return $content;
-	}
-
-	/**
-	 * Generate HTML for the copyright
-	 *
-	 * @return string HTML of the copyright
-	 * @todo Define visibility
-	 */
-	public function copyright() {
-		$content = '
-			<p>
-				<strong>TYPO3 CMS.</strong> Copyright &copy; 1998-' . date('Y') . '
-				Kasper Sk&#229;rh&#248;j. Extensions are copyright of their respective
-				owners. Go to <a href="' . TYPO3_URL_GENERAL . '">' . TYPO3_URL_GENERAL . '</a>
-				for details. TYPO3 comes with ABSOLUTELY NO WARRANTY;
-				<a href="' . TYPO3_URL_LICENSE . '">click</a> for details.
-				This is free software, and you are welcome to redistribute it
-				under certain conditions; <a href="' . TYPO3_URL_LICENSE . '">click</a>
-				for details. Obstructing the appearance of this notice is prohibited by law.
-			</p>
-			<p>
-				<a href="' . TYPO3_URL_DONATE . '"><strong>Donate</strong></a> |
-				<a href="' . TYPO3_URL_ORG . '">TYPO3.org</a>
-			</p>
-		';
-		return $content;
-	}
-
-	/**
-	 * Generate HTML for the message that the basic setup has been finished
-	 *
-	 * @return string HTML of the message
-	 * @todo Define visibility
-	 */
-	public function messageBasicFinished() {
-		return '
-			<p>
-				You have completed the basic setup of the TYPO3 Content Management System.
-				Choose between these options to continue:
-			</p>
-			<ul>
-				<li>
-					<a href="' . $this->scriptSelf . '">Configure TYPO3</a> (Recommended)
-					<br />
-					This will let you analyze and verify that everything in your
-					installation is in order. In addition, you can configure advanced
-					TYPO3 options in this step.
-				</li>
-				<li>
-					<a href="../../index.php">
-						Visit the frontend
-					</a>
-				</li>
-				<li>
-					<a href="../index.php">
-						Login to the backend
-					</a>
-					<br />
-					(Default username: <em>admin</em>, default password: <em>password</em>.)
-				</li>
-			</ul>
-		';
-	}
-
-	/**
-	 * Make the url of the script according to type, mode and step
-	 *
-	 * @param string $type The type
-	 * @return string The url
-	 * @todo Define visibility
-	 */
-	public function setScriptName($type) {
-		$value = $this->scriptSelf . '?TYPO3_INSTALL[type]=' . $type . ($this->mode ? '&mode=' . rawurlencode($this->mode) : '') . ($this->step ? '&step=' . rawurlencode($this->step) : '');
-		return $value;
-	}
-
-	/**
-	 * Return the filename that will be used for the backup.
-	 * It is important that backups of PHP files still stay as a PHP file, otherwise they could be viewed un-parsed in clear-text.
-	 *
-	 * @param string $filename Full path to a file
-	 * @return string The name of the backup file (again, including the full path)
-	 * @todo Define visibility
-	 */
-	public function getBackupFilename($filename) {
-		if (preg_match('/\\.php$/', $filename)) {
-			$backupFile = str_replace('.php', '_bak.php', $filename);
-		} else {
-			$backupFile = $filename . '~';
-		}
-		return $backupFile;
-	}
-
-	/**
-	 * Creates a table which checkboxes for updating database.
-	 *
-	 * @param array $arr Array of statements (key / value pairs where key is used for the checkboxes)
-	 * @param string $label Label for the table.
-	 * @param boolean $checked If set, then checkboxes are set by default.
-	 * @param boolean $iconDis If set, then icons are shown.
-	 * @param array $currentValue Array of "current values" for each key/value pair in $arr. Shown if given.
-	 * @param boolean $cVfullMsg If set, will show the prefix "Current value" if $currentValue is given.
-	 * @return string HTML table with checkboxes for update. Must be wrapped in a form.
-	 * @todo Define visibility
-	 */
-	public function generateUpdateDatabaseForm_checkboxes($arr, $label, $checked = 1, $iconDis = 0, $currentValue = array(), $cVfullMsg = 0) {
-		$out = array();
-		$tableId = uniqid('table');
-		$templateMarkers = array();
-		if (is_array($arr)) {
-			// Get the template file
-			$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'GenerateUpdateDatabaseFormCheckboxes.html'));
-			// Get the template part from the file
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-			// Define the markers content
-			$templateMarkers = array(
-				'label' => $label,
-				'tableId' => $tableId
-			);
-			// Select/Deselect All
-			if (count($arr) > 1) {
-				// Get the subpart for multiple tables
-				$multipleTablesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($content, '###MULTIPLETABLES###');
-				// Define the markers content
-				$multipleTablesMarkers = array(
-					'label' => $label,
-					'tableId' => $tableId,
-					'checked' => $checked ? ' checked="checked"' : '',
-					'selectAllId' => 't3-install-' . $tableId . '-checkbox',
-					'selectDeselectAll' => 'select/deselect all'
-				);
-				// Fill the markers in the subpart
-				$multipleTablesSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($multipleTablesSubpart, $multipleTablesMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for multiple tables
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###MULTIPLETABLES###', $multipleTablesSubpart);
-			// Rows
-			foreach ($arr as $key => $string) {
-				// Get the subpart for rows
-				$rowsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($content, '###ROWS###');
-				$currentSubpart = '';
-				$ico = '';
-				$warnings = array();
-				// Define the markers content
-				$rowsMarkers = array(
-					'checkboxId' => 't3-install-db-' . $key,
-					'name' => $this->dbUpdateCheckboxPrefix . '[' . $key . ']',
-					'checked' => $checked ? 'checked="checked"' : '',
-					'string' => htmlspecialchars($string)
-				);
-				if ($iconDis) {
-					$iconMarkers['backPath'] = $this->backPath;
-					if (preg_match('/^TRUNCATE/i', $string)) {
-						$iconMarkers['iconText'] = '';
-						$warnings['clear_table_info'] = 'Clearing the table is sometimes necessary when adding new keys. In case of cache_* tables this should not hurt at all. However, use it with care.';
-					} elseif (stristr($string, ' user_')) {
-						$iconMarkers['iconText'] = '(USER)';
-					} elseif (stristr($string, ' app_')) {
-						$iconMarkers['iconText'] = '(APP)';
-					} elseif (stristr($string, ' ttx_') || stristr($string, ' tx_')) {
-						$iconMarkers['iconText'] = '(EXT)';
-					}
-					if (!empty($iconMarkers)) {
-						// Get the subpart for icons
-						$iconSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($content, '###ICONAVAILABLE###');
-						// Fill the markers in the subpart
-						$iconSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($iconSubpart, $iconMarkers, '###|###', TRUE, TRUE);
-					}
-				}
-				// Substitute the subpart for icons
-				$rowsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($rowsSubpart, '###ICONAVAILABLE###', $iconSubpart);
-				if (isset($currentValue[$key])) {
-					// Get the subpart for current
-					$currentSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($rowsSubpart, '###CURRENT###');
-					// Define the markers content
-					$currentMarkers = array(
-						'message' => !$cVfullMsg ? 'Current value:' : '',
-						'value' => $currentValue[$key]
-					);
-					// Fill the markers in the subpart
-					$currentSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($currentSubpart, $currentMarkers, '###|###', TRUE, FALSE);
-				}
-				// Substitute the subpart for current
-				$rowsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($rowsSubpart, '###CURRENT###', $currentSubpart);
-				$errorSubpart = '';
-				if (isset($this->databaseUpdateErrorMessages[$key])) {
-					// Get the subpart for current
-					$errorSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($rowsSubpart, '###ERROR###');
-					// Define the markers content
-					$currentMarkers = array(
-						'errorMessage' => $this->databaseUpdateErrorMessages[$key]
-					);
-					// Fill the markers in the subpart
-					$errorSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($errorSubpart, $currentMarkers, '###|###', TRUE, FALSE);
-				}
-				// Substitute the subpart for error messages
-				$rowsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($rowsSubpart, '###ERROR###', $errorSubpart);
-				// Fill the markers in the subpart
-				$rowsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($rowsSubpart, $rowsMarkers, '###|###', TRUE, FALSE);
-				$rows[] = $rowsSubpart;
-			}
-			// Substitute the subpart for rows
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###ROWS###', implode(LF, $rows));
-			if (count($warnings)) {
-				// Get the subpart for warnings
-				$warningsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($content, '###WARNINGS###');
-				$warningItems = array();
-				foreach ($warnings as $warning) {
-					// Get the subpart for single warning items
-					$warningItemSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($warningsSubpart, '###WARNINGITEM###');
-					// Define the markers content
-					$warningItemMarker['warning'] = $warning;
-					// Fill the markers in the subpart
-					$warningItems[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($warningItemSubpart, $warningItemMarker, '###|###', TRUE, FALSE);
-				}
-				// Substitute the subpart for single warning items
-				$warningsSubpart = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($warningsSubpart, '###WARNINGITEM###', implode(LF, $warningItems));
-			}
-			// Substitute the subpart for warnings
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###WARNINGS###', $warningsSubpart);
-		}
-		// Fill the markers
-		$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($content, $templateMarkers, '###|###', TRUE, FALSE);
-		return $content;
-	}
-
-	/**
-	 * Returns HTML-code, which is a visual representation of a multidimensional array
-	 * Returns FALSE if $array_in is not an array
-	 *
-	 * @param mixed $incomingValue Array to view
-	 * @return string HTML output
-	 * @todo Define visibility
-	 */
-	public function viewArray($incomingValue) {
-		// Get the template file
-		$templateFile = @file_get_contents((PATH_site . $this->templateFilePath . 'ViewArray.html'));
-		if (is_array($incomingValue) && !empty($incomingValue)) {
-			// Get the template part from the file
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($templateFile, '###TEMPLATE###');
-			// Get the subpart for a single item
-			$itemSubpart = \TYPO3\CMS\Core\Html\HtmlParser::getSubpart($content, '###ITEM###');
-			foreach ($incomingValue as $key => $value) {
-				if (is_array($value)) {
-					$description = $this->viewArray($value);
-				} elseif (is_object($value)) {
-					$description = get_class($value);
-					if (method_exists($value, '__toString')) {
-						$description .= ': ' . (string) $value;
-					}
-				} else {
-					if (gettype($value) == 'object') {
-						$description = 'Unknown object';
-					} else {
-						$description = htmlspecialchars((string) $value);
-					}
-				}
-				// Define the markers content
-				$itemMarkers = array(
-					'key' => htmlspecialchars((string) $key),
-					'description' => !empty($description) ? $description : '&nbsp;'
-				);
-				// Fill the markers in the subpart
-				$items[] = \TYPO3\CMS\Core\Html\HtmlParser::substituteMarkerArray($itemSubpart, $itemMarkers, '###|###', TRUE, FALSE);
-			}
-			// Substitute the subpart for single item
-			$content = \TYPO3\CMS\Core\Html\HtmlParser::substituteSubpart($content, '###ITEM###', implode(LF, $items));
-		}
-		return $content;
-	}
-
-	/**
-	 * Returns a newly created TYPO3 encryption key with a given length.
-	 *
-	 * @param integer $keyLength Desired key length
-	 * @return string The encryption key
-	 */
-	public function createEncryptionKey($keyLength = 96) {
-		$bytes = GeneralUtility::generateRandomBytes($keyLength);
-		return substr(bin2hex($bytes), -96);
-	}
-
-	/**
-	 * Adds an error message that should be displayed.
-	 *
-	 * @param string $messageText
-	 */
-	public function addErrorMessage($messageText) {
-		if ($messageText == '') {
-			throw new \InvalidArgumentException('$messageText must not be empty.', 1294587483);
-		}
-		$this->errorMessages[] = $messageText;
-	}
-
-	/**
-	 * Checks whether the mysql user is allowed to create new databases.
-	 *
-	 * This code is adopted from the phpMyAdmin project
-	 * http://www.phpmyadmin.net
-	 *
-	 * @return boolean
-	 */
-	protected function checkCreateDatabasePrivileges() {
-		$createAllowed = FALSE;
-		$allowedPatterns = array();
-		$grants = $GLOBALS['TYPO3_DB']->sql_query('SHOW GRANTS');
-		// we get one or more lines like this
-		// insufficient rights:
-		// GRANT USAGE ON *.* TO 'test'@'localhost' IDENTIFIED BY ...
-		// GRANT ALL PRIVILEGES ON `test`.* TO 'test'@'localhost'
-		// sufficient rights:
-		// GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY ...
-		// loop over all result rows
-		while (($row = $GLOBALS['TYPO3_DB']->sql_fetch_row($grants)) !== FALSE) {
-			$grant = $row[0];
-			$dbNameOffset = strpos($grant, ' ON ') + 4;
-			$dbName = substr($grant, $dbNameOffset, strpos($grant, '.', $dbNameOffset) - $dbNameOffset);
-			$privileges = substr($grant, 6, strpos($grant, ' ON ') - 6);
-			// we need at least one of the following privileges
-			if ($privileges === 'ALL' || $privileges === 'ALL PRIVILEGES' || $privileges === 'CREATE' || strpos($privileges, 'CREATE,') !== FALSE) {
-				// And we need this privilege not on a specific DB, but on *
-				if ($dbName === '*') {
-					// user has permissions to create new databases
-					$createAllowed = TRUE;
-					break;
-				} else {
-					$allowedPatterns[] = str_replace('`', '', $dbName);
-				}
-			}
-		}
-		// remove all existing databases from the list of allowed patterns
-		$existingDatabases = $this->getDatabaseList();
-		foreach ($allowedPatterns as $index => $pattern) {
-			if (strpos($pattern, '%') !== FALSE) {
-				continue;
-			}
-			if (in_array($pattern, $existingDatabases)) {
-				unset($allowedPatterns[$index]);
-			}
-		}
-		if (count($allowedPatterns) > 0) {
-			return $allowedPatterns;
-		} else {
-			return $createAllowed;
-		}
-	}
-
-}
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Interfaces/CheckTheDatabaseHook.php b/typo3/sysext/install/Classes/Interfaces/CheckTheDatabaseHook.php
deleted file mode 100644
index fac2f70cc42f..000000000000
--- a/typo3/sysext/install/Classes/Interfaces/CheckTheDatabaseHook.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname Tx_Install_Interfaces_CheckTheDatabaseHook and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CheckTheDatabaseHookInterface.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CheckTheDatabaseHookInterface.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Report/InstallStatusReport.php b/typo3/sysext/install/Classes/Report/InstallStatusReport.php
index 07ed017080c5..343d802b184e 100644
--- a/typo3/sysext/install/Classes/Report/InstallStatusReport.php
+++ b/typo3/sysext/install/Classes/Report/InstallStatusReport.php
@@ -53,7 +53,7 @@ class InstallStatusReport implements \TYPO3\CMS\Reports\StatusProviderInterface
 	 * @return \TYPO3\CMS\Reports\Status Indicates status of the file system
 	 */
 	protected function getFileSystemStatus() {
-		$value = $GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_writable');
+		$value = $GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_writable');
 		$message = '';
 		$severity = \TYPO3\CMS\Reports\Status::OK;
 		// Requirement level
@@ -87,17 +87,17 @@ class InstallStatusReport implements \TYPO3\CMS\Reports\StatusProviderInterface
 			if (!@is_dir((PATH_site . $relPath))) {
 				if ($requirementLevel > 0) {
 					// directory is required
-					$value = $GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_missingDirectory');
-					$message .= sprintf($GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_directoryDoesNotExistCouldNotCreate'), $relPath) . '<br />';
+					$value = $GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_missingDirectory');
+					$message .= sprintf($GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_directoryDoesNotExistCouldNotCreate'), $relPath) . '<br />';
 					$severity = \TYPO3\CMS\Reports\Status::ERROR;
 				} else {
-					$message .= sprintf($GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_directoryDoesNotExist'), $relPath);
+					$message .= sprintf($GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_directoryDoesNotExist'), $relPath);
 					if ($requirementLevel == 0) {
-						$message .= ' ' . $GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_directoryShouldAlsoBeWritable');
+						$message .= ' ' . $GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_directoryShouldAlsoBeWritable');
 					}
 					$message .= '<br />';
 					if ($severity < \TYPO3\CMS\Reports\Status::WARNING) {
-						$value = $GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_nonExistingDirectory');
+						$value = $GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_nonExistingDirectory');
 						$severity = \TYPO3\CMS\Reports\Status::WARNING;
 					}
 				}
@@ -105,22 +105,22 @@ class InstallStatusReport implements \TYPO3\CMS\Reports\StatusProviderInterface
 				if (!is_writable((PATH_site . $relPath))) {
 					switch ($requirementLevel) {
 					case 0:
-						$message .= sprintf($GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_directoryShouldBeWritable'), (PATH_site . $relPath)) . '<br />';
+						$message .= sprintf($GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_directoryShouldBeWritable'), (PATH_site . $relPath)) . '<br />';
 						if ($severity < \TYPO3\CMS\Reports\Status::WARNING) {
-							$value = $GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_recommendedWritableDirectory');
+							$value = $GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_recommendedWritableDirectory');
 							$severity = \TYPO3\CMS\Reports\Status::WARNING;
 						}
 						break;
 					case 2:
-						$value = $GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_requiredWritableDirectory');
-						$message .= sprintf($GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_directoryMustBeWritable'), (PATH_site . $relPath)) . '<br />';
+						$value = $GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_requiredWritableDirectory');
+						$message .= sprintf($GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_directoryMustBeWritable'), (PATH_site . $relPath)) . '<br />';
 						$severity = \TYPO3\CMS\Reports\Status::ERROR;
 						break;
 					}
 				}
 			}
 		}
-		return \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Reports\\Status', $GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_fileSystem'), $value, $message, $severity);
+		return \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Reports\\Status', $GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_fileSystem'), $value, $message, $severity);
 	}
 
 	/**
@@ -138,7 +138,7 @@ class InstallStatusReport implements \TYPO3\CMS\Reports\StatusProviderInterface
 			$url = 'install/index.php?redirect_url=index.php' . urlencode('?TYPO3_INSTALL[type]=update');
 			$message = sprintf($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:warning.install_update'), '<a href="' . $url . '">', '</a>');
 		}
-		return \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Reports\\Status', $GLOBALS['LANG']->sL('LLL:EXT:install/report/locallang.xml:status_remainingUpdates'), $value, $message, $severity);
+		return \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Reports\\Status', $GLOBALS['LANG']->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_remainingUpdates'), $value, $message, $severity);
 	}
 
 }
diff --git a/typo3/sysext/install/Classes/Service/BasicService.php b/typo3/sysext/install/Classes/Service/BasicService.php
deleted file mode 100644
index 870d1db21819..000000000000
--- a/typo3/sysext/install/Classes/Service/BasicService.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname Tx_Install_Service_BasicService and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/EnableFileService.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/EnableFileService.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/EnableFileService.php b/typo3/sysext/install/Classes/Service/EnableFileService.php
similarity index 78%
rename from typo3/sysext/install/Classes/EnableFileService.php
rename to typo3/sysext/install/Classes/Service/EnableFileService.php
index 5981ab1d206b..fd6c0e1e6d65 100644
--- a/typo3/sysext/install/Classes/EnableFileService.php
+++ b/typo3/sysext/install/Classes/Service/EnableFileService.php
@@ -1,5 +1,5 @@
 <?php
-namespace TYPO3\CMS\Install;
+namespace TYPO3\CMS\Install\Service;
 
 /***************************************************************
  *  Copyright notice
@@ -26,31 +26,21 @@ namespace TYPO3\CMS\Install;
  *
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
+
 /**
  * Basic Service to check and create install tool files
  */
 class EnableFileService {
 
-	const INSTALL_TOOL_ENABLE_FILE_PATH = 'typo3conf/ENABLE_INSTALL_TOOL';
-	const QUICKSTART_FILE_PATH = 'typo3conf/FIRST_INSTALL';
 	/**
-	 * Checks, if the "FIRST_INSTALL" file exists,
-	 * if so, deletes it, and adds the ENABLE_INSTALL_TOOL file
-	 *
-	 * @return void
+	 * @constant Relative path to ENABLE_INSTALL_TOOL file
 	 */
-	static protected function checkFirstInstallFile() {
-		$quickstartFile = PATH_site . self::QUICKSTART_FILE_PATH;
-		// If typo3conf/FIRST_INSTALL is present and can be deleted, automatically create typo3conf/ENABLE_INSTALL_TOOL
-		if (is_file($quickstartFile) && is_writeable($quickstartFile) && unlink($quickstartFile)) {
-			self::createInstallToolEnableFile();
-		}
-	}
+	const INSTALL_TOOL_ENABLE_FILE_PATH = 'typo3conf/ENABLE_INSTALL_TOOL';
 
 	/**
 	 * Creates the INSTALL_TOOL_ENABLE file
 	 *
-	 * @return bool
+	 * @return boolean
 	 */
 	static public function createInstallToolEnableFile() {
 		$installEnableFilePath = self::getInstallToolEnableFilePath();
@@ -62,7 +52,7 @@ class EnableFileService {
 	/**
 	 * Removes the INSTALL_TOOL_ENABLE file
 	 *
-	 * @return bool
+	 * @return boolean
 	 */
 	static public function removeInstallToolEnableFile() {
 		return unlink(self::getInstallToolEnableFilePath());
@@ -74,7 +64,6 @@ class EnableFileService {
 	 * @return boolean
 	 */
 	static public function checkInstallToolEnableFile() {
-		self::checkFirstInstallFile();
 		$enableFile = self::getInstallToolEnableFilePath();
 		if (@file_exists($enableFile)) {
 			$content = @file_get_contents($enableFile);
@@ -114,17 +103,6 @@ class EnableFileService {
 	static protected function getInstallToolEnableFilePath() {
 		return PATH_site . self::INSTALL_TOOL_ENABLE_FILE_PATH;
 	}
-
-	/**
-	 * Checks if the install tool password is empty
-	 *
-	 * @return boolean
-	 */
-	static public function isInstallToolPasswordEmpty() {
-		return empty($GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword']);
-	}
-
 }
 
-
 ?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Session.php b/typo3/sysext/install/Classes/Service/SessionService.php
similarity index 79%
rename from typo3/sysext/install/Classes/Session.php
rename to typo3/sysext/install/Classes/Service/SessionService.php
index 82e38db74b19..be6c65c04732 100644
--- a/typo3/sysext/install/Classes/Session.php
+++ b/typo3/sysext/install/Classes/Service/SessionService.php
@@ -1,5 +1,5 @@
 <?php
-namespace TYPO3\CMS\Install;
+namespace TYPO3\CMS\Install\Service;
 
 /***************************************************************
  *  Copyright notice
@@ -26,12 +26,15 @@ namespace TYPO3\CMS\Install;
  *
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
+
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
 /**
  * Secure session handling for the install tool.
  *
  * @author Ernesto Baschny <ernst@cron-it.de>
  */
-class Session {
+class SessionService implements \TYPO3\CMS\Core\SingletonInterface {
 
 	/**
 	 * The path to our typo3temp (where we can write our sessions). Set in the
@@ -70,13 +73,6 @@ class Session {
 	 */
 	private $regenerateSessionIdTime = 5;
 
-	/**
-	 * part of the referer when the install tool has been called from the backend
-	 *
-	 * @var string
-	 */
-	private $backendFile = 'backend.php';
-
 	/**
 	 * Constructor. Starts PHP session handling in our own private store
 	 *
@@ -90,7 +86,7 @@ class Session {
 		session_set_save_handler(array($this, 'open'), array($this, 'close'), array($this, 'read'), array($this, 'write'), array($this, 'destroy'), array($this, 'gc'));
 		session_save_path($sessionSavePath);
 		session_name($this->cookieName);
-		ini_set('session.cookie_path', \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_SITE_PATH'));
+		ini_set('session.cookie_path', GeneralUtility::getIndpEnv('TYPO3_SITE_PATH'));
 		// Always call the garbage collector to clean up stale session files
 		ini_set('session.gc_probability', 100);
 		ini_set('session.gc_divisor', 100);
@@ -99,20 +95,32 @@ class Session {
 			$sessionCreationError = 'Error: session.auto-start is enabled.<br />';
 			$sessionCreationError .= 'The PHP option session.auto-start is enabled. Disable this option in php.ini or .htaccess:<br />';
 			$sessionCreationError .= '<pre>php_value session.auto_start Off</pre>';
-			throw new \RuntimeException($sessionCreationError, 1294587485);
+			throw new \TYPO3\CMS\Install\Exception($sessionCreationError, 1294587485);
 		} elseif (defined('SID')) {
 			$sessionCreationError = 'Session already started by session_start().<br />';
 			$sessionCreationError .= 'Make sure no installed extension is starting a session in its ext_localconf.php or ext_tables.php.';
-			throw new \RuntimeException($sessionCreationError, 1294587486);
+			throw new \TYPO3\CMS\Install\Exception($sessionCreationError, 1294587486);
 		}
 		session_start();
 	}
 
 	/**
 	 * Returns the path where to store our session files
+	 *
+	 * @throws \TYPO3\CMS\Install\Exception
+	 * @return string Session save path
 	 */
 	private function getSessionSavePath() {
-		$sessionSavePath = sprintf($this->typo3tempPath . $this->sessionPath, \TYPO3\CMS\Core\Utility\GeneralUtility::hmac('session:' . $GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword']));
+		if (empty($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'])) {
+			throw new \TYPO3\CMS\Install\Exception(
+				'No encryption key set to secure session',
+				1371243449
+			);
+		}
+		$sessionSavePath = sprintf(
+			$this->typo3tempPath . $this->sessionPath,
+			GeneralUtility::hmac('session:' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'])
+		);
 		$this->ensureSessionSavePathExists($sessionSavePath);
 		return $sessionSavePath;
 	}
@@ -122,22 +130,23 @@ class Session {
 	 * and throw an exception if that fails.
 	 *
 	 * @param string $sessionSavePath The absolute path to the session files
-	 * @throws \RuntimeException
+	 * @throws \TYPO3\CMS\Install\Exception
 	 */
 	private function ensureSessionSavePathExists($sessionSavePath) {
 		if (!is_dir($sessionSavePath)) {
 			try {
-				\TYPO3\CMS\Core\Utility\GeneralUtility::mkdir_deep($sessionSavePath);
+				GeneralUtility::mkdir_deep($sessionSavePath);
 			} catch (\RuntimeException $exception) {
-				throw new \RuntimeException('Could not create session folder in typo3temp/. Make sure it is writeable!', 1294587484);
+				throw new \TYPO3\CMS\Install\Exception(
+					'Could not create session folder in typo3temp/. Make sure it is writeable!',
+					1294587484
+				);
 			}
-			\TYPO3\CMS\Core\Utility\GeneralUtility::writeFile($sessionSavePath . '/.htaccess', 'Order deny, allow' . '
-' . 'Deny from all' . '
-');
+			GeneralUtility::writeFile($sessionSavePath . '/.htaccess', 'Order deny, allow' . LF . 'Deny from all');
 			$indexContent = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">';
 			$indexContent .= '<HTML><HEAD<TITLE></TITLE><META http-equiv=Refresh Content="0; Url=../../">';
 			$indexContent .= '</HEAD></HTML>';
-			\TYPO3\CMS\Core\Utility\GeneralUtility::writeFile($sessionSavePath . '/index.html', $indexContent);
+			GeneralUtility::writeFile($sessionSavePath . '/index.html', $indexContent);
 		}
 	}
 
@@ -147,7 +156,7 @@ class Session {
 	 * @return string The session ID
 	 */
 	public function startSession() {
-		$_SESSION['created'] = time();
+		$_SESSION['active'] = TRUE;
 		// Be sure to use our own session id, so create a new one
 		return $this->renewSession();
 	}
@@ -159,6 +168,14 @@ class Session {
 		session_destroy();
 	}
 
+	/**
+	 * Reset session. Sets _SESSION to empty array.
+	 */
+	public function resetSession() {
+		$_SESSION = array();
+		$_SESSION['active'] = FALSE;
+	}
+
 	/**
 	 * Generates a new session ID and sends it to the client.
 	 *
@@ -175,7 +192,7 @@ class Session {
 	 * @return boolean TRUE if there is an active session, FALSE otherwise
 	 */
 	public function hasSession() {
-		return isset($_SESSION['created']);
+		return ($_SESSION['active'] === TRUE);
 	}
 
 	/**
@@ -192,13 +209,20 @@ class Session {
 	 * Used to store our session files without exposing the session ID.
 	 *
 	 * @param string $sessionId An alternative session ID. Defaults to our current session ID
+	 * @throws \TYPO3\CMS\Install\Exception
 	 * @return string the session hash
 	 */
 	private function getSessionHash($sessionId = '') {
+		if (empty($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'])) {
+			throw new \TYPO3\CMS\Install\Exception(
+				'No encryption key set to secure session',
+				1371243450
+			);
+		}
 		if (!$sessionId) {
 			$sessionId = $this->getSessionId();
 		}
-		return md5($GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword'] . '|' . $sessionId);
+		return md5($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] . '|' . $sessionId);
 	}
 
 	/**
@@ -270,6 +294,33 @@ class Session {
 		}
 	}
 
+	/**
+	 * Add a message to "Flash" message storage.
+	 *
+	 * @param \TYPO3\CMS\Install\Status\StatusInterface $message A message to add
+	 * @return void
+	 */
+	public function addMessage(\TYPO3\CMS\Install\Status\StatusInterface $message) {
+		if (!is_array($_SESSION['messages'])) {
+			$_SESSION['messages'] = array();
+		}
+		$_SESSION['messages'][] = $message;
+	}
+
+	/**
+	 * Return stored session messages and flush.
+	 *
+	 * @return array<\TYPO3\CMS\Install\Status\StatusInterface> Messages
+	 */
+	public function getMessagesAndFlush() {
+		$messages = array();
+		if (is_array($_SESSION['messages'])) {
+			$messages = $_SESSION['messages'];
+		}
+		$_SESSION['messages'] = array();
+		return $messages;
+	}
+
 	/*************************
 	 *
 	 * PHP session handling with "secure" session files (hashed session id)
@@ -327,7 +378,7 @@ class Session {
 	 */
 	public function write($id, $sessionData) {
 		$sessionFile = $this->getSessionFile($id);
-		return \TYPO3\CMS\Core\Utility\GeneralUtility::writeFile($sessionFile, $sessionData);
+		return GeneralUtility::writeFile($sessionFile, $sessionData);
 	}
 
 	/**
@@ -377,8 +428,5 @@ class Session {
 	public function __destruct() {
 		session_write_close();
 	}
-
 }
-
-
 ?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Service/SqlExpectedSchemaService.php b/typo3/sysext/install/Classes/Service/SqlExpectedSchemaService.php
new file mode 100644
index 000000000000..4f89079d1dd9
--- /dev/null
+++ b/typo3/sysext/install/Classes/Service/SqlExpectedSchemaService.php
@@ -0,0 +1,131 @@
+<?php
+namespace TYPO3\CMS\Install\Service;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2011-2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Expected schema service
+ *
+ * @internal use in install tool only!
+ */
+class SqlExpectedSchemaService {
+
+	/**
+	 * @var \TYPO3\CMS\Extbase\Object\ObjectManager
+	 * @inject
+	 */
+	protected $objectManager = NULL;
+
+	/**
+	 * Get expected schema array
+	 *
+	 * @return array Expected schema
+	 */
+	public function getExpectedDatabaseSchema() {
+		/** @var \TYPO3\CMS\Install\Service\SqlSchemaMigrationService $schemaMigrationService */
+		$schemaMigrationService = $this->objectManager->get('TYPO3\\CMS\\Install\\Service\\SqlSchemaMigrationService');
+		// Raw concatenated ext_tables.sql and friends string
+		$expectedSchemaString = $this->getTablesDefinitionString();
+		// Remove comments
+		$cleanedExpectedSchemaString = implode(LF, $schemaMigrationService->getStatementArray($expectedSchemaString, TRUE, '^CREATE TABLE '));
+		$expectedSchema = $schemaMigrationService->getFieldDefinitions_fileContent($cleanedExpectedSchemaString);
+		return $expectedSchema;
+	}
+
+	/**
+	 * Cycle through all loaded extensions and get full table definitions as concatenated string
+	 *
+	 * @param boolean $withStatic TRUE if sql from ext_tables_static+adt.sql should be loaded, too.
+	 * @return string Concatenated SQL of loaded extensions ext_tables.sql
+	 */
+	public function getTablesDefinitionString($withStatic = FALSE) {
+		$sqlString = array();
+
+		// Find all ext_tables.sql of loaded extensions
+		$loadedExtensionInformation = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::loadTypo3LoadedExtensionInformation(FALSE);
+		foreach ($loadedExtensionInformation as $extensionConfiguration) {
+			if (is_array($extensionConfiguration) && $extensionConfiguration['ext_tables.sql']) {
+				$sqlString[] = GeneralUtility::getUrl($extensionConfiguration['ext_tables.sql']);
+			}
+			if ($withStatic
+				&& is_array($extensionConfiguration)
+				&& $extensionConfiguration['ext_tables_static+adt.sql']
+			) {
+				$sqlString[] = GeneralUtility::getUrl($extensionConfiguration['ext_tables_static+adt.sql']);
+			}
+		}
+
+		// Add caching framework sql definition
+		$sqlString[] = $this->getCachingFrameworkRequiredDatabaseSchema();
+
+		// Add category registry sql definition
+		$sqlString[] = \TYPO3\CMS\Core\Category\CategoryRegistry::getInstance()->getDatabaseTableDefinitions();
+
+		return implode(LF . LF . LF . LF, $sqlString);
+	}
+
+	/**
+	 * Get schema SQL of required cache framework tables.
+	 *
+	 * This method needs ext_localconf and ext_tables loaded!
+	 *
+	 * This is a hack, but there was no smarter solution with current cache configuration setup:
+	 * ToolController sets the extbase caches to NullBackend to ensure the install tool does not
+	 * cache anything. The CacheManager gets the required SQL from database backends only, so we need to
+	 * temporarily 'fake' the standard db backends for extbase caches so they are respected.
+	 *
+	 * Additionally, the extbase_object cache is already in use and instantiated, and the CacheManager singleton
+	 * does not allow overriding this definition. The only option at the moment is to 'fake' another cache with
+	 * a different name, and then substitute this name in the sql content with the real one.
+	 *
+	 * @TODO: This construct needs to be improved. It does not recognise if some custom ext overwrote the extbase cache config
+	 * @TODO: Solve this as soon as cache configuration is separated from ext_localconf / ext_tables
+	 * @TODO: It might be possible to reduce this ugly construct by circumventing the 'singleton' of CacheManager by using 'new'
+	 *
+	 * @return string Cache framework SQL
+	 */
+	public function getCachingFrameworkRequiredDatabaseSchema() {
+		$cacheConfigurationBackup = $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'];
+		$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['extbase_datamapfactory_datamap'] = array();
+		$extbaseObjectFakeName = uniqid('extbase_object');
+		$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$extbaseObjectFakeName] = array();
+		$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['extbase_reflection'] = array();
+		$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['extbase_typo3dbbackend_tablecolumns'] = array();
+		/** @var \TYPO3\CMS\Core\Cache\CacheManager $cacheManager */
+		$cacheManager = $GLOBALS['typo3CacheManager'];
+		$cacheManager->setCacheConfigurations($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']);
+		$cacheSqlString = \TYPO3\CMS\Core\Cache\Cache::getDatabaseTableDefinitions();
+		$sqlString = str_replace($extbaseObjectFakeName, 'extbase_object', $cacheSqlString);
+		$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'] = $cacheConfigurationBackup;
+		$cacheManager->setCacheConfigurations($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']);
+
+		return $sqlString;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Sql/SchemaMigrator.php b/typo3/sysext/install/Classes/Service/SqlSchemaMigrationService.php
similarity index 99%
rename from typo3/sysext/install/Classes/Sql/SchemaMigrator.php
rename to typo3/sysext/install/Classes/Service/SqlSchemaMigrationService.php
index a4b2ff898df5..a03546dabec0 100644
--- a/typo3/sysext/install/Classes/Sql/SchemaMigrator.php
+++ b/typo3/sysext/install/Classes/Service/SqlSchemaMigrationService.php
@@ -1,5 +1,5 @@
 <?php
-namespace TYPO3\CMS\Install\Sql;
+namespace TYPO3\CMS\Install\Service;
 
 /***************************************************************
  *  Copyright notice
@@ -30,10 +30,13 @@ namespace TYPO3\CMS\Install\Sql;
 /**
  * Verify TYPO3 DB table structure. Mainly used in install tool
  * compare wizard and extension manager.
- *
- * @author Christian Kuhn <lolli@schwarzbu.ch>
  */
-class SchemaMigrator {
+class SqlSchemaMigrationService {
+
+	/**
+	 * @constant Maximum field width of MySQL
+	 */
+	const MYSQL_MAXIMUM_FIELD_WIDTH = 64;
 
 	/**
 	 * @var string Prefix of deleted tables
@@ -51,8 +54,6 @@ class SchemaMigrator {
 	 */
 	protected $character_sets = array();
 
-	// Maximum field width of MYSQL
-	const MYSQL_MAXIMUM_FIELD_WIDTH = 64;
 	/**
 	 * Constructor function
 	 */
@@ -719,8 +720,5 @@ class SchemaMigrator {
 		unset($value);
 		return $whichTables;
 	}
-
 }
-
-
 ?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Service/UpdateDispatcherService.php b/typo3/sysext/install/Classes/Service/UpdateDispatcherService.php
deleted file mode 100644
index 4efdae9d6ead..000000000000
--- a/typo3/sysext/install/Classes/Service/UpdateDispatcherService.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Service;
-
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2012-2013 Oliver Hader <oliver.hader@typo3.org>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-
-/**
- * Dispatches update wizard tasks.
- *
- * @author Oliver Hader <oliver.hader@typo3.org>
- */
-class UpdateDispatcherService implements \TYPO3\CMS\Core\SingletonInterface {
-	/**
-	 * @var \TYPO3\CMS\Install\Installer
-	 */
-	protected $installer;
-
-	/**
-	 * @param \TYPO3\CMS\Install\Installer $installer
-	 */
-	public function __construct(\TYPO3\CMS\Install\Installer $installer) {
-		$this->getDatabase()->store_lastBuiltQuery = TRUE;
-		$this->installer = $installer;
-	}
-
-	/**
-	 * Dispatches updates that are also used to initialize TYPO3.
-	 *
-	 * @return void
-	 */
-	public function dispatchInitializeUpdates() {
-		$queries = array();
-		$messages = array();
-
-		foreach ($this->findInitializeUpdates() as $initializeUpdate) {
-			$initializeUpdate->performUpdate($queries, $messages);
-		}
-	}
-
-	/**
-	 * Gets class names extending \TYPO3\CMS\Install\Updates\InitializeUpdate
-	 *
-	 * @return array|\TYPO3\CMS\Install\Updates\AbstractUpdate[]|\TYPO3\CMS\Install\Updates\InstallerProcessInterface[]
-	 */
-	protected function findInitializeUpdates() {
-		$initializeUpdates = array();
-
-		foreach ($this->findAllUpdates() as $update) {
-			if ($update instanceof \TYPO3\CMS\Install\Updates\InstallerProcessInterface) {
-				$initializeUpdates[] = $update;
-			}
-		}
-
-		return $initializeUpdates;
-	}
-
-	/**
-	 * Gets all registered updates.
-	 *
-	 * @return array|\TYPO3\CMS\Install\Updates\AbstractUpdate[]
-	 */
-	protected function findAllUpdates() {
-		$updates = array();
-
-		foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] as $identifier => $className) {
-			$update = $this->createUpdateObject($identifier, $className);
-
-			if ($update !== NULL) {
-				$updates[] = $update;
-			}
-		}
-
-		return $updates;
-	}
-
-	/**
-	 * Creates an update object.
-	 *
-	 * @param string $identifier
-	 * @param string $className
-	 * @return \TYPO3\CMS\Install\Updates\AbstractUpdate
-	 * @throws \RuntimeException
-	 */
-	protected function createUpdateObject($identifier, $className) {
-		$updateObject = \TYPO3\CMS\Core\Utility\GeneralUtility::getUserObj($className);
-
-		if (!$updateObject instanceof \TYPO3\CMS\Install\Updates\AbstractUpdate) {
-			throw new \RuntimeException(
-				'Update class ' . $className . ' must implement \TYPO3\CMS\Install\Updates\AbstractUpdate',
-				1346336675
-			);
-		}
-
-		/** @var $updateObject \TYPO3\CMS\Install\Updates\AbstractUpdate */
-		$updateObject->setIdentifier($identifier);
-		$updateObject->versionNumber = \TYPO3\CMS\Core\Utility\VersionNumberUtility::convertVersionNumberToInteger(TYPO3_version);
-		$updateObject->pObj = $this->installer;
-
-		if (isset($this->installer->INSTALL['update'][$identifier])) {
-			$updateObject->userInput = $this->installer->INSTALL['update'][$identifier];
-		}
-
-		return $updateObject;
-	}
-
-	/**
-	 * @return \TYPO3\CMS\Core\Database\DatabaseConnection
-	 */
-	protected function getDatabase() {
-		return $GLOBALS['TYPO3_DB'];
-	}
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Status/StatusUtility.php b/typo3/sysext/install/Classes/Status/StatusUtility.php
index 68ea7316e902..0108d3bc454c 100644
--- a/typo3/sysext/install/Classes/Status/StatusUtility.php
+++ b/typo3/sysext/install/Classes/Status/StatusUtility.php
@@ -30,51 +30,6 @@ namespace TYPO3\CMS\Install\Status;
  */
 class StatusUtility {
 
-	/**
-	 * Default constructor
-	 */
-	public function __construct() {
-		require_once __DIR__ . '/Exception.php';
-	}
-
-	/**
-	 * Render a flat list of status objects
-	 *
-	 * @param array $statusObjects <\TYPO3\CMS\Install\Status\StatusInterface> $statusObjects
-	 * @throws Exception
-	 * @return string Rendered objects
-	 */
-	public function renderStatusObjectsAsHtml(array $statusObjects = array()) {
-		$messageHtmlBoilerPlate =
-			'<div class="typo3-message message-%1s" >' .
-				'<div class="header-container">' .
-					'<div class="message-header message-left"><strong>%2s</strong></div>' .
-					'<div class="message-header message-right"></div>' .
-				'</div>' .
-				'<div class="message-body">%3s</div>' .
-			'</div>' .
-			'<p></p>';
-
-		$html = '';
-		foreach ($statusObjects as $status) {
-			if (!$status instanceof StatusInterface) {
-				throw new Exception(
-					'Object must implement StatusInterface',
-					1366919440
-				);
-			}
-			/** @var $status StatusInterface */
-			$severityIdentifier = $status->getSeverity();
-			$html .= sprintf(
-				$messageHtmlBoilerPlate,
-				$severityIdentifier,
-				$status->getTitle(),
-				$status->getMessage()
-			);
-		}
-		return $html;
-	}
-
 	/**
 	 * Order status objects by severity
 	 *
@@ -118,4 +73,4 @@ class StatusUtility {
 		return $filteredObjects;
 	}
 }
-?>
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/SystemEnvironment/Check.php b/typo3/sysext/install/Classes/SystemEnvironment/Check.php
index 08f5bfe7b73e..ca3b76c92294 100644
--- a/typo3/sysext/install/Classes/SystemEnvironment/Check.php
+++ b/typo3/sysext/install/Classes/SystemEnvironment/Check.php
@@ -36,6 +36,8 @@ use TYPO3\CMS\Install\Status;
  * specific configuration values or directories. It should not fail
  * if there is no TYPO3 at all.
  *
+ * The only core code used is the class loader
+ *
  * This class is instantiated as the *very first* class during
  * installation. It is meant to be *standalone* und must not have
  * any requirements, except the status classes. It must be possible
@@ -74,22 +76,9 @@ class Check {
 		'standard',
 		'xml',
 		'zip',
-		'zlib'
+		'zlib',
 	);
 
-	/**
-	 * Constructor to load further classes
-	 */
-	public function __construct() {
-		require_once(__DIR__ . '/../Status/StatusInterface.php');
-		require_once(__DIR__ . '/../Status/AbstractStatus.php');
-		require_once(__DIR__ . '/../Status/NoticeStatus.php');
-		require_once(__DIR__ . '/../Status/InfoStatus.php');
-		require_once(__DIR__ . '/../Status/OkStatus.php');
-		require_once(__DIR__ . '/../Status/WarningStatus.php');
-		require_once(__DIR__ . '/../Status/ErrorStatus.php');
-	}
-
 	/**
 	 * Get all status information as array with status objects
 	 *
@@ -107,7 +96,6 @@ class Check {
 		$statusArray[] = $this->checkDisableFunctions();
 		$statusArray[] = $this->checkSafeMode();
 		$statusArray[] = $this->checkDocRoot();
-		$statusArray[] = $this->checkSqlSafeMode();
 		$statusArray[] = $this->checkOpenBaseDir();
 		$statusArray[] = $this->checkOpenSslInstalled();
 		$statusArray[] = $this->checkSuhosinLoaded();
@@ -130,6 +118,7 @@ class Check {
 		$statusArray[] = $this->checkGdLibFreeTypeSupport();
 		$statusArray[] = $this->checkPhpMagicQuotes();
 		$statusArray[] = $this->checkRegisterGlobals();
+		$statusArray[] = $this->isTrueTypeFontDpiStandard();
 		return $statusArray;
 	}
 
@@ -332,7 +321,7 @@ class Check {
 				$status->setTitle('Infinite PHP script execution time');
 				$status->setMessage(
 					'Your max_execution_time is set to 0 (infinite). While TYPO3 is fine' .
-					' with this, you risk a denial-of-service of you system if for whatever' .
+					' with this, you risk a denial-of-service of your system if for whatever' .
 					' reason some script hangs in an infinite loop. You are usually on safe side ' .
 					' if max_execution_time is reduced to ' . $recommendedMaximumExecutionTime
 				);
@@ -462,36 +451,6 @@ class Check {
 		return $status;
 	}
 
-	/**
-	 * Check sql.safe_mode
-	 *
-	 * @return Status\OkStatus|Status\WarningStatus
-	 */
-	protected function checkSqlSafeMode() {
-		$sqlSafeModeEnabled = FALSE;
-		if (version_compare(phpversion(), '5.4', '<')) {
-			$sqlSafeModeEnabled = filter_var(
-				ini_get('sql.safe_mode'),
-				FILTER_VALIDATE_BOOLEAN,
-				array(FILTER_REQUIRE_SCALAR, FILTER_NULL_ON_FAILURE)
-			);
-		}
-		if ($sqlSafeModeEnabled) {
-			$status = new Status\WarningStatus();
-			$status->setTitle('sql.safe_mode is enabled');
-			$status->setMessage(
-				'This means that you can only connect to the database with a' .
-				' username corresponding to the user of the webserver process' .
-				' or file owner. Consult your ISP for information about this.' .
-				' The owner of the current file is: ' . get_current_user()
-			);
-		} else {
-			$status = new Status\OkStatus();
-			$status->setTitle('PHP sql.safe_mode is off');
-		}
-		return $status;
-	}
-
 	/**
 	 * Check open_basedir
 	 *
@@ -800,15 +759,15 @@ class Check {
 			$status->setTitle('Windows apache thread stack size');
 			$status->setMessage(
 				'This current value can not be checked by the system, so please ignore this warning if it' .
-				' is already taken care off: Fluid uses complex regular expressions which require a lot' .
+				' is already taken care of: Fluid uses complex regular expressions which require a lot' .
 				' of stack space during the first processing.' .
-				' On Windows the default stack size for Apache is a lot smaller than on unix.' .
-				' You can increase the size to 8MB (default on unix) by adding to the httpd.conf:' .
-				' ThreadStackSize 8388608. Restart Apache after this change.'
+				' On Windows the default stack size for Apache is a lot smaller than on UNIX.' .
+				' You can increase the size to 8MB (default on UNIX) by adding to the httpd.conf:' .
+				' <IfModule mpm_winnt_module>ThreadStackSize 8388608</IfModule>. Restart Apache after this change.'
 			);
 		} else {
 			$status = new Status\OkStatus();
-			$status->setTitle('ThreadStackSize is not an issue on unix systems');
+			$status->setTitle('ThreadStackSize is not an issue on UNIX systems');
 		}
 		return $status;
 	}
@@ -958,7 +917,7 @@ class Check {
 			&& function_exists('imagegif')
 			&& (imagetypes() & IMG_GIF)
 		) {
-			$imageResource = @imagecreatefromgif(__DIR__ . '/TestImages/jesus.gif');
+			$imageResource = @imagecreatefromgif(__DIR__ . '/../../Resources/Public/Images/TestInput/Test.gif');
 			if (is_resource($imageResource)) {
 				imagedestroy($imageResource);
 				$status = new Status\OkStatus();
@@ -1017,7 +976,7 @@ class Check {
 			&& function_exists('imagepng')
 			&& (imagetypes() & IMG_PNG)
 		) {
-			$imageResource = @imagecreatefrompng(__DIR__ . '/TestImages/jesus.png');
+			$imageResource = @imagecreatefrompng(__DIR__ . '/../../Resources/Public/Images/TestInput/Test.png');
 			if (is_resource($imageResource)) {
 				imagedestroy($imageResource);
 				$status = new Status\OkStatus();
@@ -1068,6 +1027,44 @@ class Check {
 		return $status;
 	}
 
+	/**
+	 * Create true type font test image
+	 *
+	 * @return Status\OkStatus|Status\NoticeStatus
+	 */
+	protected function isTrueTypeFontDpiStandard() {
+		// 20 Pixels at 96 DPI - the DefaultConfiguration
+		$fontSize = (20 / 96 * 72);
+
+		$textDimensions = @imageftbbox(
+			$fontSize,
+			0,
+			__DIR__ . '/../../Resources/Private/Font/vera.ttf',
+			'Testing true type support'
+		);
+		$fontBoxWidth = $textDimensions[2] - $textDimensions[0];
+
+		if ($fontBoxWidth < 300 && $fontBoxWidth > 200) {
+			$status = new Status\OkStatus();
+			$status->setTitle('FreeType True Type Font DPI');
+			$status->setMessage('Fonts are rendered by FreeType library. ' .
+					'We need to ensure that the final dimensions are as expected. ' .
+					'This server renderes fonts based on 96 DPI correctly'
+			);
+
+		} else {
+			$status = new Status\NoticeStatus();
+			$status->setTitle('FreeType True Type Font DPI');
+			$status->setMessage('Fonts are rendered by FreeType library. ' .
+					'This server renders fonts not as expected. ' .
+					'Please configure FreeType or TYPO3_CONF_VARS[GFX][TTFdpi]'
+			);
+
+		}
+
+		return $status;
+	}
+
 	/**
 	 * Check php magic quotes
 	 *
diff --git a/typo3/sysext/install/Classes/Updates/Base.php b/typo3/sysext/install/Classes/Updates/Base.php
deleted file mode 100644
index e064919cbce9..000000000000
--- a/typo3/sysext/install/Classes/Updates/Base.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname Tx_Install_Updates_Base and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/Updates/AbstractUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/Updates/AbstractUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Updates/File/FilemountUpdateWizard.php b/typo3/sysext/install/Classes/Updates/File/FilemountUpdateWizard.php
deleted file mode 100644
index cda219526b50..000000000000
--- a/typo3/sysext/install/Classes/Updates/File/FilemountUpdateWizard.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname Tx_Install_Updates_File_FilemountUpdateWizard and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/Updates/FilemountUpdateWizard.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/Updates/FilemountUpdateWizard.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Updates/File/InitUpdateWizard.php b/typo3/sysext/install/Classes/Updates/File/InitUpdateWizard.php
deleted file mode 100644
index 4ad093792e17..000000000000
--- a/typo3/sysext/install/Classes/Updates/File/InitUpdateWizard.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname Tx_Install_Updates_File_InitUpdateWizard and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/Updates/InitUpdateWizard.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/Updates/InitUpdateWizard.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Updates/File/TceformsUpdateWizard.php b/typo3/sysext/install/Classes/Updates/File/TceformsUpdateWizard.php
deleted file mode 100644
index 0c12f6f9190b..000000000000
--- a/typo3/sysext/install/Classes/Updates/File/TceformsUpdateWizard.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname Tx_Install_Updates_File_TceformsUpdateWizard and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/Updates/TceformsUpdateWizard.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/Updates/TceformsUpdateWizard.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Updates/File/TtContentUploadsUpdateWizard.php b/typo3/sysext/install/Classes/Updates/File/TtContentUploadsUpdateWizard.php
deleted file mode 100644
index fc8f9f311cf1..000000000000
--- a/typo3/sysext/install/Classes/Updates/File/TtContentUploadsUpdateWizard.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname Tx_Install_Updates_File_TtContentUploadsUpdateWizard and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/Updates/TtContentUploadsUpdateWizard.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/Updates/TtContentUploadsUpdateWizard.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/Updates/InitUpdateWizard.php b/typo3/sysext/install/Classes/Updates/InitUpdateWizard.php
index f39057e169f7..d95723e9ebed 100644
--- a/typo3/sysext/install/Classes/Updates/InitUpdateWizard.php
+++ b/typo3/sysext/install/Classes/Updates/InitUpdateWizard.php
@@ -38,7 +38,7 @@ class InitUpdateWizard extends \TYPO3\CMS\Install\Updates\AbstractUpdate {
 	protected $title = 'Initialize database tables for the File Abstraction Layer (FAL)';
 
 	/**
-	 * @var \TYPO3\CMS\Install\Sql\SchemaMigrator
+	 * @var \TYPO3\CMS\Install\Service\SqlSchemaMigrationService
 	 */
 	protected $installerSql;
 
@@ -46,7 +46,7 @@ class InitUpdateWizard extends \TYPO3\CMS\Install\Updates\AbstractUpdate {
 	 * Creates this object.
 	 */
 	public function __construct() {
-		$this->installerSql = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\Sql\\SchemaMigrator');
+		$this->installerSql = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\Service\\SqlSchemaMigrationService');
 	}
 
 	/**
diff --git a/typo3/sysext/install/Classes/Updates/TceformsUpdateWizard.php b/typo3/sysext/install/Classes/Updates/TceformsUpdateWizard.php
index a68ca0d46250..6350f7cd281f 100644
--- a/typo3/sysext/install/Classes/Updates/TceformsUpdateWizard.php
+++ b/typo3/sysext/install/Classes/Updates/TceformsUpdateWizard.php
@@ -89,7 +89,6 @@ class TceformsUpdateWizard extends \TYPO3\CMS\Install\Updates\AbstractUpdate {
 	 */
 	public function performUpdate(array &$dbQueries, &$customMessages) {
 		$this->init();
-		// Function below copied from sysext/install/updates/class.tx_coreupdates_imagelink.php
 		$tables = array(
 			'tt_content' => array(
 				'image' => array(
@@ -282,4 +281,4 @@ class TceformsUpdateWizard extends \TYPO3\CMS\Install\Updates\AbstractUpdate {
 }
 
 
-?>
\ No newline at end of file
+?>
diff --git a/typo3/sysext/install/Classes/View/StandaloneView.php b/typo3/sysext/install/Classes/View/StandaloneView.php
new file mode 100644
index 000000000000..1a9ea1ae466d
--- /dev/null
+++ b/typo3/sysext/install/Classes/View/StandaloneView.php
@@ -0,0 +1,56 @@
+<?php
+namespace TYPO3\CMS\Install\View;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * A standalone fluid view with reduced functionality for ext:install
+ *
+ * In contrast to the parent class, this StandaloneView does not
+ * bootstrap a frontend, so some view helper like f:link will not work.
+ */
+class StandaloneView extends \TYPO3\CMS\Fluid\View\StandaloneView {
+
+	/**
+	 * Constructor
+	 */
+	public function __construct() {
+		$this->objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
+		$this->templateParser = $this->objectManager->get('TYPO3\\CMS\\Fluid\\Core\\Parser\\TemplateParser');
+		$this->setRenderingContext($this->objectManager->get('TYPO3\\CMS\\Fluid\\Core\\Rendering\\RenderingContext'));
+		$request = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Request');
+		$request->setRequestURI(\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_REQUEST_URL'));
+		$request->setBaseURI(\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_SITE_URL'));
+		$uriBuilder = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Routing\\UriBuilder');
+		$uriBuilder->setRequest($request);
+		$controllerContext = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ControllerContext');
+		$controllerContext->setRequest($request);
+		$controllerContext->setUriBuilder($uriBuilder);
+		$this->setControllerContext($controllerContext);
+		$this->templateCompiler = $this->objectManager->get('TYPO3\\CMS\\Fluid\\Core\\Compiler\\TemplateCompiler');
+		$this->templateCompiler->setTemplateCache($GLOBALS['typo3CacheManager']->getCache('fluid_template'));
+	}
+}
+
+?>
diff --git a/typo3/sysext/install/Classes/ViewHelpers/Be/ContainerViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/Be/ContainerViewHelper.php
new file mode 100644
index 000000000000..cdd709a53089
--- /dev/null
+++ b/typo3/sysext/install/Classes/ViewHelpers/Be/ContainerViewHelper.php
@@ -0,0 +1,126 @@
+<?php
+namespace TYPO3\CMS\Install\ViewHelpers\Be;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * View helper which allows you to create extbase based modules in the
+ * style of TYPO3 default modules.
+ * Note: This feature is experimental!
+ *
+ * = Examples =
+ *
+ * <code title="Simple">
+ * <f:be.container>your module content</f:be.container>
+ * </code>
+ * <output>
+ * "your module content" wrapped with propper head & body tags.
+ * Default backend CSS styles and JavaScript will be included
+ * </output>
+ *
+ * <code title="All options">
+ * <f:be.container pageTitle="foo" enableJumpToUrl="false" enableClickMenu="false" loadPrototype="false" loadScriptaculous="false" scriptaculousModule="someModule,someOtherModule" loadExtJs="true" loadExtJsTheme="false" extJsAdapter="jQuery" enableExtJsDebug="true" addCssFile="{f:uri.resource(path:'styles/backend.css')}" addJsFile="{f:uri.resource(path:'scripts/main.js')}">your module content</f:be.container>
+ * </code>
+ * <output>
+ * "your module content" wrapped with propper head & body tags.
+ * Custom CSS file EXT:your_extension/Resources/Public/styles/backend.css and JavaScript file EXT:your_extension/Resources/Public/scripts/main.js will be loaded
+ * </output>
+ */
+class ContainerViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendViewHelper {
+
+	/**
+	 * Render start page with \TYPO3\CMS\Backend\Template\DocumentTemplate and pageTitle
+	 *
+	 * @param string  $pageTitle title tag of the module. Not required by default, as BE modules are shown in a frame
+	 * @param boolean $enableJumpToUrl If TRUE, includes "jumpTpUrl" javascript function required by ActionMenu. Defaults to TRUE
+	 * @param boolean $enableClickMenu If TRUE, loads clickmenu.js required by BE context menus. Defaults to TRUE
+	 * @param boolean $loadPrototype specifies whether to load prototype library. Defaults to TRUE
+	 * @param boolean $loadScriptaculous specifies whether to load scriptaculous libraries. Defaults to FALSE
+	 * @param string  $scriptaculousModule additionales modules for scriptaculous
+	 * @param boolean $loadExtJs specifies whether to load ExtJS library. Defaults to FALSE
+	 * @param boolean $loadExtJsTheme whether to load ExtJS "grey" theme. Defaults to FALSE
+	 * @param string  $extJsAdapter load alternative adapter (ext-base is default adapter)
+	 * @param boolean $enableExtJsDebug if TRUE, debug version of ExtJS is loaded. Use this for development only
+	 * @param array $addCssFiles Custom CSS files to be loaded
+	 * @param array $addJsFiles Custom JavaScript files to be loaded
+	 * @param array $triggers Defined triggers to be forwarded to client (e.g. refreshing backend widgets)
+	 * @return string
+	 * @see template
+	 * @see \TYPO3\CMS\Core\Page\PageRenderer
+	 */
+	public function render($pageTitle = '', $enableJumpToUrl = TRUE, $enableClickMenu = TRUE, $loadPrototype = TRUE, $loadScriptaculous = FALSE, $scriptaculousModule = '', $loadExtJs = FALSE, $loadExtJsTheme = TRUE, $extJsAdapter = '', $enableExtJsDebug = FALSE, $addCssFiles = array(), $addJsFiles = array(), $triggers = array()) {
+		$doc = $this->getDocInstance();
+		$pageRenderer = $doc->getPageRenderer();
+		if ($enableJumpToUrl) {
+			$doc->JScode .= '
+				<script language="javascript" type="text/javascript">
+					script_ended = 0;
+					function jumpToUrl(URL)	{
+						document.location = URL;
+					}
+					' . $doc->redirectUrls() . '
+				</script>
+			';
+		}
+		if ($enableClickMenu) {
+			$doc->loadJavascriptLib('js/clickmenu.js');
+		}
+		if ($loadPrototype) {
+			$pageRenderer->loadPrototype();
+		}
+		if ($loadScriptaculous) {
+			$pageRenderer->loadScriptaculous($scriptaculousModule);
+		}
+		if ($loadExtJs) {
+			$pageRenderer->loadExtJS(TRUE, $loadExtJsTheme, $extJsAdapter);
+			if ($enableExtJsDebug) {
+				$pageRenderer->enableExtJsDebug();
+			}
+		}
+		if (is_array($addCssFiles) && count($addCssFiles) > 0) {
+			foreach ($addCssFiles as $addCssFile) {
+				$pageRenderer->addCssFile($addCssFile);
+			}
+		}
+		if (is_array($addJsFiles) && count($addJsFiles) > 0) {
+			foreach ($addJsFiles as $addJsFile) {
+				$pageRenderer->addJsFile($addJsFile);
+			}
+		}
+		// Handle triggers
+		if (!empty($triggers[\TYPO3\CMS\Extensionmanager\Controller\AbstractController::TRIGGER_RefreshModuleMenu])) {
+			$pageRenderer->addJsInlineCode(
+				\TYPO3\CMS\Extensionmanager\Controller\AbstractController::TRIGGER_RefreshModuleMenu,
+				'if (top.TYPO3ModuleMenu.refreshMenu) { top.TYPO3ModuleMenu.refreshMenu(); }'
+			);
+		}
+		$output = $this->renderChildren();
+		$output = $doc->startPage($pageTitle) . $output;
+		$output .= $doc->endPage();
+		return $output;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/ViewHelpers/ConstantViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/ConstantViewHelper.php
new file mode 100644
index 000000000000..281c16eefe61
--- /dev/null
+++ b/typo3/sysext/install/Classes/ViewHelpers/ConstantViewHelper.php
@@ -0,0 +1,43 @@
+<?php
+namespace TYPO3\CMS\Install\ViewHelpers;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Render value of a contstant
+ */
+class ConstantViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
+
+	/**
+	 * Render a constant
+	 *
+	 * @param string $name Name of the constant
+	 * @return string Value of constant
+	 */
+	public function render($name) {
+		return constant($name);
+	}
+}
+
+?>
diff --git a/typo3/sysext/install/Classes/ViewHelpers/Exception.php b/typo3/sysext/install/Classes/ViewHelpers/Exception.php
new file mode 100644
index 000000000000..ec194c8ab59c
--- /dev/null
+++ b/typo3/sysext/install/Classes/ViewHelpers/Exception.php
@@ -0,0 +1,33 @@
+<?php
+namespace TYPO3\CMS\Install\ViewHelpers;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * A view helper exception
+ */
+class Exception extends \TYPO3\CMS\Install\Exception {
+
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/ViewHelpers/File/ImageDimensionViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/File/ImageDimensionViewHelper.php
new file mode 100644
index 000000000000..db5d9d384e0b
--- /dev/null
+++ b/typo3/sysext/install/Classes/ViewHelpers/File/ImageDimensionViewHelper.php
@@ -0,0 +1,72 @@
+<?php
+namespace TYPO3\CMS\Install\ViewHelpers\File;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Get width or height from image file
+ *
+ * = Examples =
+ *
+ * <code title="Defaults">
+ * <f:file.imageDimension>/var/www/typo3/instance/typo3temp/foo.jpg</f:file.size>
+ * </code>
+ * <output>
+ * 170
+ * </output>
+ */
+class ImageDimensionViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
+
+	/**
+	 * Get width / height from image file
+	 *
+	 * @param string $dimension Either width or height
+	 * @throws \TYPO3\CMS\Install\ViewHelpers\Exception
+	 * @return integer width or height
+	 */
+	public function render($dimension = 'width') {
+		if ($dimension !== 'width' && $dimension !== 'height') {
+			throw new \TYPO3\CMS\Install\ViewHelpers\Exception(
+				'Dimension must be either \'width\' or \'height\'',
+				1369563247
+			);
+		}
+		$absolutePathToFile = $this->renderChildren();
+		if (!is_file($absolutePathToFile)) {
+			throw new \TYPO3\CMS\Install\ViewHelpers\Exception(
+				'File not found',
+				1369563248
+			);
+		}
+		$actualDimension = getimagesize($absolutePathToFile);
+		if ($dimension === 'width') {
+			$size = $actualDimension[0];
+		} else {
+			$size = $actualDimension[1];
+		}
+		return $size;
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/ViewHelpers/File/RelativePathViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/File/RelativePathViewHelper.php
new file mode 100644
index 000000000000..0757ccaf6241
--- /dev/null
+++ b/typo3/sysext/install/Classes/ViewHelpers/File/RelativePathViewHelper.php
@@ -0,0 +1,52 @@
+<?php
+namespace TYPO3\CMS\Install\ViewHelpers\File;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Get file path relative to PATH_site from absolute path
+ *
+ * = Examples =
+ *
+ * <code title="Defaults">
+ * <f:file.relativePath>/var/www/typo3/instance/typo3temp/foo.jpg</f:file.relativePath>
+ * </code>
+ * <output>
+ * typo3temp/foo.jpg
+ * </output>
+ */
+class RelativePathViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
+
+	/**
+	 * Get relative path
+	 *
+	 * @return string Relative path
+	 */
+	public function render() {
+		$absolutePath = $this->renderChildren();
+		return substr($absolutePath, strlen(PATH_site));
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/ViewHelpers/File/SizeViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/File/SizeViewHelper.php
new file mode 100644
index 000000000000..3cd2555865de
--- /dev/null
+++ b/typo3/sysext/install/Classes/ViewHelpers/File/SizeViewHelper.php
@@ -0,0 +1,66 @@
+<?php
+namespace TYPO3\CMS\Install\ViewHelpers\File;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Get file size from file
+ *
+ * = Examples =
+ *
+ * <code title="Defaults">
+ * <f:file.size>/var/www/typo3/instance/typo3temp/foo.jpg</f:file.size>
+ * </code>
+ * <output>
+ * 1,2k
+ * </output>
+ */
+class SizeViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
+
+	/**
+	 * Get size from file
+	 *
+	 * @param boolean $format If true, file size will be formatted
+	 * @throws \TYPO3\CMS\Install\ViewHelpers\Exception
+	 * @return integer File size
+	 */
+	public function render($format = TRUE) {
+		$absolutePathToFile = $this->renderChildren();
+		if (!is_file($absolutePathToFile)) {
+			throw new \TYPO3\CMS\Install\ViewHelpers\Exception(
+				'File not found',
+				1369563246
+			);
+		}
+		$size = filesize($absolutePathToFile);
+		if ($format) {
+			$size = GeneralUtility::formatSize($size);
+		}
+		return $size;
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/ViewHelpers/Format/CropViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/Format/CropViewHelper.php
new file mode 100644
index 000000000000..512e1027473e
--- /dev/null
+++ b/typo3/sysext/install/Classes/ViewHelpers/Format/CropViewHelper.php
@@ -0,0 +1,68 @@
+<?php
+namespace TYPO3\CMS\Install\ViewHelpers\Format;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Simplified crop view helper that does not need a frontend environment
+ *
+ * = Examples =
+ *
+ * <code title="Defaults">
+ * <f:format.crop maxCharacters="10">This is some very long text</f:format.crop>
+ * </code>
+ * <output>
+ * This is...
+ * </output>
+ *
+ * <code title="Inline notation">
+ * {someLongText -> f:format.crop(maxCharacters: 10)}
+ * </code>
+ * <output>
+ * someLongText cropped after 10 characters...
+ * (depending on the value of {someLongText})
+ * </output>
+ */
+class CropViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
+
+	/**
+	 * Render the cropped text
+	 *
+	 * @param integer $maxCharacters Place where to truncate the string
+	 * @throws \TYPO3\CMS\Install\ViewHelpers\Exception
+	 * @return string cropped text
+	 */
+	public function render($maxCharacters) {
+		if (empty($maxCharacters) || $maxCharacters < 1) {
+			throw new \TYPO3\CMS\Install\ViewHelpers\Exception(
+				'maxCharacters must be a positive integer',
+				1371410113
+			);
+		}
+		$stringToTruncate = $this->renderChildren();
+		return substr($stringToTruncate, 0, $maxCharacters);
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Classes/ViewHelpers/Format/ImageMagickCommandsViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/Format/ImageMagickCommandsViewHelper.php
new file mode 100644
index 000000000000..0cccffb878ee
--- /dev/null
+++ b/typo3/sysext/install/Classes/ViewHelpers/Format/ImageMagickCommandsViewHelper.php
@@ -0,0 +1,51 @@
+<?php
+namespace TYPO3\CMS\Install\ViewHelpers\Format;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Display image magick commands
+ */
+class ImageMagickCommandsViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
+
+	/**
+	 * Display image magick commands
+	 *
+	 * @param array $commands Given commands
+	 * @return string Formatted commands
+	 */
+	public function render(array $commands = array()) {
+		$result = array();
+		foreach ($commands as $commandGroup) {
+			$result[] = 'Command: ' . $commandGroup[1];
+			// If 3 elements: last one is result
+			if (count($commandGroup) === 3) {
+				$result[] = 'Result: ' . $commandGroup[2];
+			}
+		}
+		return '<textarea rows="' . count($result) . '">' . implode(LF, $result) . '</textarea>';
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Migrations/Code/ClassAliasMap.php b/typo3/sysext/install/Migrations/Code/ClassAliasMap.php
index 735cdce242e4..1e803cf67258 100644
--- a/typo3/sysext/install/Migrations/Code/ClassAliasMap.php
+++ b/typo3/sysext/install/Migrations/Code/ClassAliasMap.php
@@ -1,7 +1,5 @@
 <?php
 return array(
-	'Tx_Install_Interfaces_CheckTheDatabaseHook' => 'TYPO3\\CMS\\Install\\CheckTheDatabaseHookInterface',
-	'tx_install_mod1' => 'TYPO3\\CMS\\Install\\Controller\\InstallToolModuleController',
 	'tx_coreupdates_addflexformstoacl' => 'TYPO3\\CMS\\Install\\CoreUpdates\\AddFlexFormsToAclUpdate',
 	'tx_coreupdates_charsetDefaults' => 'TYPO3\\CMS\\Install\\CoreUpdates\\CharsetDefaultsUpdate',
 	'tx_coreupdates_compatversion' => 'TYPO3\\CMS\\Install\\CoreUpdates\\CompatVersionUpdate',
@@ -16,12 +14,13 @@ return array(
 	'tx_coreupdates_migrateworkspaces' => 'TYPO3\\CMS\\Install\\CoreUpdates\\MigrateWorkspacesUpdate',
 	'tx_coreupdates_notinmenu' => 'TYPO3\\CMS\\Install\\CoreUpdates\\NotInMenuUpdate',
 	'tx_coreupdates_t3skin' => 'TYPO3\\CMS\\Install\\CoreUpdates\\T3skinUpdate',
-	'tx_install_ajax' => 'TYPO3\\CMS\\Install\\EidHandler',
-	'Tx_Install_Service_BasicService' => 'TYPO3\\CMS\\Install\\EnableFileService',
-	'tx_install' => 'TYPO3\\CMS\\Install\\Installer',
+	'Tx_Install_Service_BasicService' => 'TYPO3\\CMS\\Install\\Service\\EnableFileService',
+	'TYPO3\\CMS\\Install\\EnableFileService' => 'TYPO3\\CMS\\Install\\Service\\EnableFileService',
 	'tx_install_report_InstallStatus' => 'TYPO3\\CMS\\Install\\Report\\InstallStatusReport',
-	'tx_install_session' => 'TYPO3\\CMS\\Install\\Session',
-	't3lib_install_Sql' => 'TYPO3\\CMS\\Install\\Sql\\SchemaMigrator',
+	'tx_install_session' => 'TYPO3\\CMS\\Install\\Service\\SessionService',
+	'TYPO3\\CMS\\Install\\Session' => 'TYPO3\\CMS\\Install\\Service\\SessionService',
+	't3lib_install_Sql' => 'TYPO3\\CMS\\Install\\Service\\SqlSchemaMigrationService',
+	'TYPO3\\CMS\\Install\\Sql\\SchemaMigrator' => 'TYPO3\\CMS\\Install\\Service\\SqlSchemaMigrationService',
 	'Tx_Install_Updates_Base' => 'TYPO3\\CMS\\Install\\Updates\\AbstractUpdate',
 	'Tx_Install_Updates_File_FilemountUpdateWizard' => 'TYPO3\\CMS\\Install\\Updates\\FilemountUpdateWizard',
 	'Tx_Install_Updates_File_InitUpdateWizard' => 'TYPO3\\CMS\\Install\\Updates\\InitUpdateWizard',
diff --git a/typo3/sysext/install/Resources/Private/Font/README.txt b/typo3/sysext/install/Resources/Private/Font/README.txt
new file mode 100644
index 000000000000..4520330ae471
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Font/README.txt
@@ -0,0 +1,137 @@
+*******************************************************************************
+Bitstream Vera Sans
+"vera.ttf" - A "verdana"-look-alike font. If you want to use the real Verdana
+font you should upload the verdana-normal ttf file from your Windows system
+(fonts/verdana.ttf).
+*******************************************************************************
+
+This file was downloaded from <http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/>.
+
+Copyright Holder: Bitstream, Inc.
+
+License (vera.ttf):
+
+Bitstream Vera Fonts Copyright
+
+The fonts have a generous copyright, allowing derivative works (as
+long as "Bitstream" or "Vera" are not in the names), and full
+redistribution (so long as they are not *sold* by themselves). They
+can be be bundled, redistributed and sold with any software.
+
+The fonts are distributed under the following copyright:
+
+Copyright
+=========
+
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream
+Vera is a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the fonts accompanying this license ("Fonts") and associated
+documentation files (the "Font Software"), to reproduce and distribute
+the Font Software, including without limitation the rights to use,
+copy, merge, publish, distribute, and/or sell copies of the Font
+Software, and to permit persons to whom the Font Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright and trademark notices and this permission notice
+shall be included in all copies of one or more of the Font Software
+typefaces.
+
+The Font Software may be modified, altered, or added to, and in
+particular the designs of glyphs or characters in the Fonts may be
+modified and additional glyphs or characters may be added to the
+Fonts, only if the fonts are renamed to names not containing either
+the words "Bitstream" or the word "Vera".
+
+This License becomes null and void to the extent applicable to Fonts
+or Font Software that has been modified and is distributed under the
+"Bitstream Vera" names.
+
+The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by
+itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT
+SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
+
+Except as contained in this notice, the names of Gnome, the Gnome
+Foundation, and Bitstream Inc., shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this Font
+Software without prior written authorization from the Gnome Foundation
+or Bitstream Inc., respectively. For further information, contact:
+fonts at gnome dot org.
+
+Copyright FAQ
+=============
+
+   1. I don't understand the resale restriction... What gives?
+
+      Bitstream is giving away these fonts, but wishes to ensure its
+      competitors can't just drop the fonts as is into a font sale system
+      and sell them as is. It seems fair that if Bitstream can't make money
+      from the Bitstream Vera fonts, their competitors should not be able to
+      do so either. You can sell the fonts as part of any software package,
+      however.
+
+   2. I want to package these fonts separately for distribution and
+      sale as part of a larger software package or system.  Can I do so?
+
+      Yes. A RPM or Debian package is a "larger software package" to begin
+      with, and you aren't selling them independently by themselves.
+      See 1. above.
+
+   3. Are derivative works allowed?
+      Yes!
+
+   4. Can I change or add to the font(s)?
+      Yes, but you must change the name(s) of the font(s).
+
+   5. Under what terms are derivative works allowed?
+
+      You must change the name(s) of the fonts. This is to ensure the
+      quality of the fonts, both to protect Bitstream and Gnome. We want to
+      ensure that if an application has opened a font specifically of these
+      names, it gets what it expects (though of course, using fontconfig,
+      substitutions could still could have occurred during font
+      opening). You must include the Bitstream copyright. Additional
+      copyrights can be added, as per copyright law. Happy Font Hacking!
+
+   6. If I have improvements for Bitstream Vera, is it possible they might get
+       adopted in future versions?
+
+      Yes. The contract between the Gnome Foundation and Bitstream has
+      provisions for working with Bitstream to ensure quality additions to
+      the Bitstream Vera font family. Please contact us if you have such
+      additions. Note, that in general, we will want such additions for the
+      entire family, not just a single font, and that you'll have to keep
+      both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add
+      glyphs to the font, they must be stylistically in keeping with Vera's
+      design. Vera cannot become a "ransom note" font. Jim Lyles will be
+      providing a document describing the design elements used in Vera, as a
+      guide and aid for people interested in contributing to Vera.
+
+   7. I want to sell a software package that uses these fonts: Can I do so?
+
+      Sure. Bundle the fonts with your software and sell your software
+      with the fonts. That is the intent of the copyright.
+
+   8. If applications have built the names "Bitstream Vera" into them,
+      can I override this somehow to use fonts of my choosing?
+
+      This depends on exact details of the software. Most open source
+      systems and software (e.g., Gnome, KDE, etc.) are now converting to
+      use fontconfig (see www.fontconfig.org) to handle font configuration,
+      selection and substitution; it has provisions for overriding font
+      names and subsituting alternatives. An example is provided by the
+      supplied local.conf file, which chooses the family Bitstream Vera for
+      "sans", "serif" and "monospace".  Other software (e.g., the XFree86
+      core server) has other mechanisms for font substitution.
+
diff --git a/typo3/sysext/install/Resources/Private/Font/vera.ttf b/typo3/sysext/install/Resources/Private/Font/vera.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..58cd6b5e61eff273e920942e28041f8ddcf1e1b5
GIT binary patch
literal 65932
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
B52OG9

literal 0
HcmV?d00001

diff --git a/typo3/sysext/install/mod/locallang_mod.xlf b/typo3/sysext/install/Resources/Private/Language/BackendModule.xlf
similarity index 100%
rename from typo3/sysext/install/mod/locallang_mod.xlf
rename to typo3/sysext/install/Resources/Private/Language/BackendModule.xlf
diff --git a/typo3/sysext/install/Resources/Private/Language/Report/locallang.xlf b/typo3/sysext/install/Resources/Private/Language/Report/locallang.xlf
index bb38f8674140..7cebdfab0885 100644
--- a/typo3/sysext/install/Resources/Private/Language/Report/locallang.xlf
+++ b/typo3/sysext/install/Resources/Private/Language/Report/locallang.xlf
@@ -24,6 +24,42 @@
 			<trans-unit id="environment.status.message.info" xml:space="preserve">
 				<source />
 			</trans-unit>
+			<trans-unit id="status_fileSystem" xml:space="preserve">
+				<source>File System</source>
+			</trans-unit>
+			<trans-unit id="status_writable" xml:space="preserve">
+				<source>Writable</source>
+			</trans-unit>
+			<trans-unit id="status_missingDirectory" xml:space="preserve">
+				<source>Required directory missing</source>
+			</trans-unit>
+			<trans-unit id="status_nonExistingDirectory" xml:space="preserve">
+				<source>Directory not existing</source>
+			</trans-unit>
+			<trans-unit id="status_recommendedWritableDirectory" xml:space="preserve">
+				<source>Directory should be writable</source>
+			</trans-unit>
+			<trans-unit id="status_requiredWritableDirectory" xml:space="preserve">
+				<source>Directory not writable</source>
+			</trans-unit>
+			<trans-unit id="status_directoryDoesNotExist" xml:space="preserve">
+				<source>%s does not exist.</source>
+			</trans-unit>
+			<trans-unit id="status_directoryDoesNotExistCouldNotCreate" xml:space="preserve">
+				<source>%s does not exist and could not be created.</source>
+			</trans-unit>
+			<trans-unit id="status_directoryShouldAlsoBeWritable" xml:space="preserve">
+				<source>Also note that it should be writable, if it did exist.</source>
+			</trans-unit>
+			<trans-unit id="status_directoryShouldBeWritable" xml:space="preserve">
+				<source>%s should be writable.</source>
+			</trans-unit>
+			<trans-unit id="status_directoryMustBeWritable" xml:space="preserve">
+				<source>%s must be writable.</source>
+			</trans-unit>
+			<trans-unit id="status_remainingUpdates" xml:space="preserve">
+				<source>Remaining updates</source>
+			</trans-unit>
 		</body>
 	</file>
 </xliff>
diff --git a/typo3/sysext/install/Resources/Private/Layouts/BackendModule.html b/typo3/sysext/install/Resources/Private/Layouts/BackendModule.html
new file mode 100644
index 000000000000..b719c05a58bf
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Layouts/BackendModule.html
@@ -0,0 +1,31 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:comment>
+	This layout is for the 'backend module' that only shows the 'Unlock the Install Tool' message
+	and then redirects to the step installation / install tool
+</f:comment>
+
+<i:be.container
+	pageTitle="Install tool"
+	enableJumpToUrl="true"
+	enableClickMenu="false"
+	loadPrototype="false"
+	loadScriptaculous="false"
+	loadExtJs="false"
+	loadExtJsTheme="false"
+	addCssFiles="{
+		0:'{f:uri.resource(path:\'Stylesheets/BackendModule/ShowEnableInstallToolButton.css\')}'
+	}"
+	addJsFiles="{}"
+>
+
+	<div id="typo3-docheader">
+		<div class="typo3-docheader-functions"></div>
+		<div class="typo3-docheader-buttons"></div>
+	</div>
+	<div id="typo3-docbody">
+		<div id="typo3-inner-docbody">
+			<f:render section="Content" />
+		</div>
+	</div>
+</i:be.container>
diff --git a/typo3/sysext/install/Resources/Private/Layouts/Step.html b/typo3/sysext/install/Resources/Private/Layouts/Step.html
new file mode 100644
index 000000000000..7430e9d05e0a
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Layouts/Step.html
@@ -0,0 +1,36 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<!DOCTYPE html>
+<html>
+	<head>
+		<title>Installing TYPO3</title>
+		<script type="text/javascript" src="../../../contrib/jquery/jquery-1.9.1.min.js?{time}"></script>
+		<script type="text/javascript" src="../Resources/Public/Javascript/Install.js?{time}"></script>
+		<link rel="stylesheet" type="text/css" href="../Resources/Public/Stylesheets/Action/Step/General.css?{time}" />
+	</head>
+	<body>
+		<div id="t3-install-outer">
+			<h1></h1>
+
+			<div id="t3-install-step-execution-messages">
+				<f:if condition="{messages}">
+					<f:for each="{messages}" as="message">
+						<f:render partial="Action/Common/StatusMessage" arguments="{message: message}" />
+					</f:for>
+				</f:if>
+			</div>
+
+			<div id="t3-install-box-border-top">&nbsp;</div>
+
+			<h2>Installing TYPO3 <i:constant name="TYPO3_version" /></h2>
+
+			<div id="t3-install-box-body">
+				<f:render section="Content" />
+			</div>
+
+			<div id="t3-install-box-border-bottom">&nbsp;</div>
+
+			<f:render partial="Action/Common/Copyright" arguments="{_all}" />
+		</div>
+	</body>
+</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Layouts/ToolAuthenticated.html b/typo3/sysext/install/Resources/Private/Layouts/ToolAuthenticated.html
new file mode 100644
index 000000000000..3d718c2521b5
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Layouts/ToolAuthenticated.html
@@ -0,0 +1,54 @@
+<f:if condition="{context} == 'backend'">
+	<f:then>
+		<!DOCTYPE html>
+		<html>
+			<head>
+				<title>Install tool on site {siteName}</title>
+				<f:render partial="Action/Common/Headers" arguments="{_all}" />
+				<link rel="stylesheet" type="text/css" href="../../../sysext/t3skin/stylesheets/visual/element_docheader.css?{time}" />
+				<link rel="stylesheet" type="text/css" href="../../../sysext/t3skin/stylesheets/structure/element_docheader.css?{time}" />
+			</head>
+			<body>
+				<div id="typo3-docheader">
+					<div class="typo3-docheader-functions"></div>
+					<div class="typo3-docheader-buttons"></div>
+				</div>
+				<div id="typo3-docbody">
+					<div id="typo3-inner-docbody">
+						<div id="t3-install-outer">
+							<f:render partial="Action/Common/Head" arguments="{_all}" />
+							<f:render partial="Action/Common/Left" arguments="{_all}" />
+							<div id="t3-install-right">
+								<div id="t3-install-box-body">
+									<f:render section="Content" />
+								</div>
+							</div>
+							<f:render partial="Action/Common/Copyright" arguments="{_all}" />
+						</div>
+					</div>
+				</div>
+			</body>
+		</html>
+	</f:then>
+	<f:else>
+		<!DOCTYPE html>
+		<html>
+			<head>
+				<title>Install tool on site {siteName}</title>
+				<f:render partial="Action/Common/Headers" arguments="{_all}" />
+			</head>
+			<body class="standalone">
+				<div id="t3-install-outer">
+					<f:render partial="Action/Common/Head" arguments="{_all}" />
+					<f:render partial="Action/Common/Left" arguments="{_all}" />
+					<div id="t3-install-right">
+						<div id="t3-install-box-body">
+							<f:render section="Content" />
+						</div>
+					</div>
+					<f:render partial="Action/Common/Copyright" arguments="{_all}" />
+				</div>
+			</body>
+		</html>
+	</f:else>
+</f:if>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/Copyright.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Copyright.html
new file mode 100644
index 000000000000..3aaeceb12d4a
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Copyright.html
@@ -0,0 +1,17 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<div id="t3-install-copyright">
+	<p>
+		<strong>TYPO3 CMS.</strong> Copyright © 1998-<f:format.date format="Y">{time}</f:format.date>
+		Kasper Skårhøj. Extensions are copyright of their respective owners.
+		Go to <a href="{i:constant(name: 'TYPO3_URL_GENERAL')}"><i:constant name="TYPO3_URL_GENERAL"/></a> for details.
+		TYPO3 comes with ABSOLUTELY NO WARRANTY; <a href="{i:constant(name: 'TYPO3_URL_LICENSE')}">click</a> for details.
+		This is free software, and you are welcome to redistribute it under certain conditions;
+		<a href="{i:constant(name: 'TYPO3_URL_LICENSE')}">click</a> for details.
+		Obstructing the appearance of this notice is prohibited by law.
+	</p>
+	<p>
+		<a href="{i:constant(name: 'TYPO3_URL_DONATE')}"><strong>Donate</strong></a> |
+		<a href="{i:constant(name: 'TYPO3_URL_ORG')}">TYPO3.org</a>
+	</p>
+</div>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/Head.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Head.html
new file mode 100644
index 000000000000..a12847378944
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Head.html
@@ -0,0 +1,2 @@
+<h1>TYPO3 {typo3Version}</h1>
+<h2>TYPO3 CMS {typo3Version} Install tool on site: {siteName}</h2>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/Headers.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Headers.html
new file mode 100644
index 000000000000..b2961f08356b
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Headers.html
@@ -0,0 +1,5 @@
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<link rel="shortcut icon" href="../../../gfx/favicon.ico" />
+<link rel="stylesheet" type="text/css" href="../Resources/Public/Stylesheets/Action/Common/Install.css?{time}" />
+<script type="text/javascript" src="../../../contrib/jquery/jquery-1.9.1.min.js?{time}"></script>
+<script type="text/javascript" src="../Resources/Public/Javascript/Install.js?{time}"></script>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/HiddenFormFields.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/HiddenFormFields.html
new file mode 100644
index 000000000000..1a2aa695bf38
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/HiddenFormFields.html
@@ -0,0 +1,4 @@
+<input type="hidden" name="install[controller]" value="{controller}" />
+<input type="hidden" name="install[action]" value="{action}" />
+<input type="hidden" name="install[token]" value="{token}" />
+<input type="hidden" name="install[context]" value="{context}" />
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/Left.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Left.html
new file mode 100644
index 000000000000..ccca144e5849
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Left.html
@@ -0,0 +1,57 @@
+<div id="t3-install-left">
+	<ol id="t3-install-menu">
+		<li id="t3-install-menu-welcome" class="{f:if(condition:'{action} == \'welcome\'', then:'act')}">
+			<a href="Install.php?install[action]=welcome&install[context]={context}&install[controller]=tool">
+				Welcome
+			</a>
+		</li>
+		<li id="t3-install-menu-importantActions" class="{f:if(condition:'{action} == \'importantActions\'', then:'act')}">
+			<a href="Install.php?install[action]=importantActions&install[context]={context}&install[controller]=tool">
+				Important actions
+			</a>
+		</li>
+		<li id="t3-install-menu-systemEnvironment" class="{f:if(condition:'{action} == \'systemEnvironment\'', then:'act')}">
+			<a href="Install.php?install[action]=systemEnvironment&install[context]={context}&install[controller]=tool">
+				System environment
+			</a>
+		</li>
+		<li id="t3-install-menu-folderStructure" class="{f:if(condition:'{action} == \'folderStructure\'', then:'act')}">
+			<a href="Install.php?install[action]=folderStructure&install[context]={context}&install[controller]=tool">
+				Folder structure
+			</a>
+		</li>
+		<li id="t3-install-menu-testSetup" class="{f:if(condition:'{action} == \'testSetup\'', then:'act')}">
+			<a href="Install.php?install[action]=testSetup&install[context]={context}&install[controller]=tool">
+				Test setup
+			</a>
+		</li>
+		<li id="t3-install-menu-updateWizard" class="{f:if(condition:'{action} == \'updateWizard\'', then:'act')}">
+			<a href="Install.php?install[action]=updateWizard&install[context]={context}&install[controller]=tool">
+				Update wizard
+			</a>
+		</li>
+		<li id="t3-install-menu-allConfiguration" class="{f:if(condition:'{action} == \'allConfiguration\'', then:'act')}">
+			<a href="Install.php?install[action]=allConfiguration&install[context]={context}&install[controller]=tool">
+				All configuration
+			</a>
+		</li>
+		<li id="t3-install-menu-cleanUp" class="{f:if(condition:'{action} == \'cleanUp\'', then:'act')}">
+			<a href="Install.php?install[action]=cleanUp&install[context]={context}&install[controller]=tool">
+				Clean up
+			</a>
+		</li>
+		<li id="t3-install-menu-logout">
+			<a href="Install.php?install[action]=logout&install[context]={context}&install[controller]=tool">
+				Logout from Install Tool
+			</a>
+		</li>
+	</ol>
+	<ol id="t3-install-links">
+		<li>
+			<a href="../../../index.php">Backend admin</a>
+		</li>
+		<li>
+			<a href="../../../../index.php">Frontend website</a>
+		</li>
+	</ol>
+</div>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/LoginForm.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/LoginForm.html
new file mode 100644
index 000000000000..0164acd6e896
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/LoginForm.html
@@ -0,0 +1,40 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<h1></h1>
+
+<h2>Login to TYPO3 {typo3Version} Install Tool</h2>
+
+<div id="t3-install-box-body">
+	<h3>Site: {siteName}</h3>
+
+	<form method="post" id="t3-install-form-login">
+		<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+		<fieldset>
+			<ol>
+				<li class="t3-install-form-label-width-7">
+					<label for="t3-install-form-password">Password</label>
+					<input id="t3-install-form-password" type="password" name="install[values][password]" class="t3-install-form-input-text" />
+				</li>
+			</ol>
+		</fieldset>
+
+		<f:render partial="Action/Common/SubmitButton" arguments="{name:'login', text:'Login'}"/>
+	</form>
+</div>
+<div id="t3-install-box-border-bottom">&nbsp;</div>
+
+<f:if condition="{messages}">
+	<f:for each="{messages}" as="message">
+		<f:render partial="Action/Common/StatusMessage" arguments="{message: message}" />
+	</f:for>
+</f:if>
+
+<p class="typo3-message message-information">
+	The Install Tool Password is <em>not</em> the admin password of TYPO3.
+	<br />
+	The default password is <em>joh316</em>. Be sure to change it!
+	<br /><br />
+	If you don't know the current password, you can set a new one by setting the value of
+	$TYPO3_CONF_VARS['BE']['installToolPassword'] in typo3conf/LocalConfiguration.php to
+	the md5() hash value of the password you desire.
+</p>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/StatusMessage.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/StatusMessage.html
new file mode 100644
index 000000000000..dc2c281f30f1
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/StatusMessage.html
@@ -0,0 +1,8 @@
+<div class="typo3-message message-{message.severity}" >
+	<div class="header-container">
+		<div class="message-header message-left"><strong>{message.title}</strong></div>
+		<div class="message-header message-right"></div>
+	</div>
+	<div class="message-body">{message.message}</div>
+</div>
+<p></p>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/SubmitButton.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/SubmitButton.html
new file mode 100644
index 000000000000..f1b7cba8fff3
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/SubmitButton.html
@@ -0,0 +1,13 @@
+<fieldset class="t3-install-form-submit">
+	<ol>
+		<li>
+			<button
+					type="submit"
+					name="install[set][{name}]"
+					>
+				{text}
+				<span class="t3-install-form-button-icon-positive">&nbsp;</span>
+			</button>
+		</li>
+	</ol>
+</fieldset>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/ConnectDetails.html b/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/ConnectDetails.html
new file mode 100644
index 000000000000..aeadac08270f
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/ConnectDetails.html
@@ -0,0 +1,66 @@
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<input type="hidden" value="execute" name="install[set]" />
+
+	<fieldset class="t3-install-form-label-width-7">
+		<ol>
+			<f:if condition="{renderConnectDetailsUsername}">
+				<li>
+					<label for="t3-install-step-username">Username</label>
+					<input id="t3-install-step-username" class="t3-install-form-input-text" type="text" value="{username}" name="install[values][username]">
+				</li>
+			</f:if>
+
+			<f:if condition="{renderConnectDetailsPassword}">
+				<li>
+					<label for="t3-install-step-password">Password</label>
+					<input id="t3-install-step-password" class="t3-install-form-input-text" type="password" value="{password}" name="install[values][password]">
+				</li>
+			</f:if>
+
+			<f:if condition="{renderConnectDetailsHost}">
+				<li>
+					<label for="t3-install-step-host">Host</label>
+					<input id="t3-install-step-host" class="t3-install-form-input-text" type="text" value="{host}" name="install[values][host]">
+				</li>
+			</f:if>
+
+			<f:if condition="{renderConnectDetailsPort}">
+				<li>
+					<label for="t3-install-step-port">Port</label>
+					<input id="t3-install-step-port" class="t3-install-form-input-text" type="text" value="{port}" name="install[values][port]">
+				</li>
+			</f:if>
+
+			<f:if condition="{renderConnectDetailsDatabase}">
+				<li>
+					<label for="t3-install-step-database">Database</label>
+					<input id="t3-install-step-database" class="t3-install-form-input-text" type="text" value="{database}" name="install[values][database]">
+				</li>
+			</f:if>
+
+			<f:if condition="{renderConnectDetailsOracleSidConnect}">
+				<li>
+					<label for="t3-install-form-type">Oracle Sid</label>
+					<select id="t3-install-form-type" name="install[values][type]">
+						<option value="servicename">Service name</option>
+						<f:if condition="{oracleSidSelected}">
+							<f:then>
+								<option value="sid" selected="selected">SID</option>
+							</f:then>
+							<f:else>
+								<option value="sid">SID</option>
+							</f:else>
+						</f:if>
+					</select>
+				</li>
+			</f:if>
+		</ol>
+	</fieldset>
+
+	<button type="submit">
+		Continue
+		<span class="t3-install-form-button-icon-positive">&nbsp;</span>
+	</button>
+</form>
+<hr />
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/DbalDriverSelection.html b/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/DbalDriverSelection.html
new file mode 100644
index 000000000000..13cd6b1a6de6
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/DbalDriverSelection.html
@@ -0,0 +1,45 @@
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<input type="hidden" value="execute" name="install[set]" />
+
+	<fieldset class="t3-install-form-label-width-7">
+		<ol>
+			<li>
+				<label>Driver</label>
+				<select name="install[values][setDbalDriver]" onChange="this.form.submit();">
+					<f:if condition="{selectedDbalDriver}">
+						<f:then>
+						</f:then>
+						<f:else>
+							<option></option>
+						</f:else>
+					</f:if>
+
+					<f:if condition="{dbalDrivers}">
+						<f:then>
+							<f:for each="{dbalDrivers}" as="drivers" key="abstractionLayer">
+								<optgroup label="{abstractionLayer}">
+									<f:for each="{drivers}" as="driver">
+										<f:if condition="{driver.selected}">
+											<f:then>
+												<option value="{driver.driver}" selected="selected">
+													{driver.label}
+												</option>
+											</f:then>
+											<f:else>
+												<option value="{driver.driver}">
+													{driver.label}
+												</option>
+											</f:else>
+										</f:if>
+									</f:for>
+								</optgroup>
+							</f:for>
+						</f:then>
+					</f:if>
+				</select>
+			</li>
+		</ol>
+	</fieldset>
+</form>
+<hr />
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/LoadDbal.html b/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/LoadDbal.html
new file mode 100644
index 000000000000..c860c5e963fe
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/LoadDbal.html
@@ -0,0 +1,16 @@
+<p>
+	TYPO3 CMS native database implementation is based on mysql. A database abstraction layer
+	allows to run TYPO3 CMS on different database engines like postgres. This is used rather seldom
+	and some core parts and extensions do not fully support this. Your TYPO3 CMS experience might suffer
+	if you chose to install the system on anything different than mysql.
+</p>
+
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<input type="hidden" value="execute" name="install[set]" />
+	<input type="hidden" value="1" name="install[values][loadDbal]" />
+	<button type="submit">
+		I do not use mysql
+		<span class="t3-install-form-button-icon-negative">&nbsp;</span>
+	</button>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/UnloadDbal.html b/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/UnloadDbal.html
new file mode 100644
index 000000000000..bc1690c18e7e
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Step/DatabaseConnect/UnloadDbal.html
@@ -0,0 +1,9 @@
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<input type="hidden" value="execute" name="install[set]" />
+	<input type="hidden" value="1" name="install[values][unloadDbal]" />
+	<button type="submit">
+		I use native mysql
+		<span class="t3-install-form-button-icon-positive">&nbsp;</span>
+	</button>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/AllConfiguration/SubSection.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/AllConfiguration/SubSection.html
new file mode 100644
index 000000000000..d82195e82ec7
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/AllConfiguration/SubSection.html
@@ -0,0 +1,61 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<div class="toggleGroup">
+	<div class="toggleButton">
+		<h4><strong>Section: $TYPO3_CONF_VARS['{sectionName}']</strong></h4>
+	</div>
+	<p></p>
+
+	<div class="toggleData" style="display:none">
+		<f:for each="{sectionData}" as="item">
+			<div class="typo3-message message-ok" >
+				<div class="header-container">
+					<div class="message-header">
+						<strong>[{sectionName}][{item.key}] </strong>
+						<f:if condition="{item.value}">
+							= {item.value -> i:format.crop(maxCharacters: 40)}
+						</f:if>
+					</div>
+				</div>
+				<div class="message-body">
+					{item.description -> f:format.raw()}
+					<br />
+
+					<f:if condition="{item.type} == 'textarea'">
+						<textarea
+							rows="5"
+							cols="60"
+							name="install[values][{sectionName}][{item.key}]"
+						>{item.value}</textarea>
+					</f:if>
+
+					<f:if condition="{item.type} == 'checkbox'">
+						<input
+							type="hidden"
+							value="0"
+							name="install[values][{sectionName}][{item.key}]"
+						/>
+						<input
+							type="checkbox"
+							value="{item.value}"
+							name="install[values][{sectionName}][{item.key}]"
+							{f:if(condition: item.checked, then:'checked="checked"')}
+						/>
+					</f:if>
+
+					<f:if condition="{item.type} == 'input'">
+						<input
+							type="text"
+							value="{item.value}"
+							name="install[values][{sectionName}][{item.key}]"
+							class="t3-install-form-input-text"
+						/>
+					</f:if>
+				</div>
+			</div>
+			<p></p>
+		</f:for>
+	</div>
+</div>
+
+<hr />
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ClearTables.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ClearTables.html
new file mode 100644
index 000000000000..5d35b16259bf
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ClearTables.html
@@ -0,0 +1,39 @@
+<h4>Clear tables</h4>
+
+<p>
+	Use with care! Clearing tables here can have a negative impact on your site functionality.
+	You could log out all users and delete all their basket data and loose logging
+	information!
+</p>
+<p>
+	Some database tables in TYPO3 CMS hold semi-temporary data that is not deleted if
+	clicking "Clear all cache" in the backend. Those can be cleared here, effectively
+	removing *all* rows from it. This can be useful in rare cases.
+</p>
+
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+
+	<f:for each="{cleanableTables}" as="cleanableTable">
+		<fieldset>
+			<ol>
+				<li class="t3-install-form-label-after">
+					<input
+						id="t3-install-database_clearcache-{cleanableTable.name}"
+						name="install[values][{cleanableTable.name}]"
+						value="1"
+						type="checkbox"
+					/>
+					<label for="t3-install-database_clearcache-{cleanableTable.name}">
+						<strong>{cleanableTable.name}</strong>, Rows: {cleanableTable.rows}, Description: {cleanableTable.description}
+					</label>
+				</li>
+			</ol>
+		</fieldset>
+	</f:for>
+
+	<f:render
+		partial="Action/Common/SubmitButton"
+		arguments="{name:'clearTables', text:'Clear selected tables'}"
+	/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ResetBackendUserUc.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ResetBackendUserUc.html
new file mode 100644
index 000000000000..2b7204797313
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ResetBackendUserUc.html
@@ -0,0 +1,19 @@
+<h4>Reset backend user preferences</h4>
+
+<p>
+	If you press this button all backend users from the tables be_users will
+	have their user preferences cleared (field 'uc' set to an empty string).
+</p>
+<p>
+	This may come in handy in rare cases where that configuration may be corrupt.
+	Clearing this will clear all user settings from the 'Setup' module.
+</p>
+
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+
+	<f:render
+		partial="Action/Common/SubmitButton"
+		arguments="{name:'resetBackendUserUc', text:'Reset backend user preferences'}"
+	/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/Typo3TempFiles.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/Typo3TempFiles.html
new file mode 100644
index 000000000000..0e250835a61a
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/Typo3TempFiles.html
@@ -0,0 +1,113 @@
+<h4>Clean typo3temp/ folder</h4>
+
+<div class="toggleGroup">
+	<div class="toggleButton">
+		<h4>About</h4>
+	</div>
+	<div class="toggleData" style="display:none">
+		<p>
+			TYPO3 uses this directory for temporary files, mainly processed and cached images.
+			The filenames are cryptic. They are unique representations of the file properties
+			made by md5-hashing a serialized array with information.
+		</p>
+		<p>
+			Anyway this directory may contain many thousand files and a lot of them may be of no use anymore.
+		</p>
+		<p>
+			With this action you can delete the files in this folder. When you do that, you
+			should also clear the cache database tables afterwards.
+		</p>
+		<p>
+			This tool will delete files only if the last 10 characters before the extension
+			(3 chars+'.') are hexadecimal valid ciphers, which are lowercase a-f and 0-9.
+		</p>
+	</div>
+</div>
+
+<dl class="t3-install-definitionlist">
+	<dt>
+		Number of temporary files:
+	</dt>
+	<dd>
+		{typo3TempData.numberOfFilesInSelectedDirectory}
+	</dd>
+	<dt>
+		Number matching:
+	</dt>
+	<dd>
+		{typo3TempData.numberOfFilesMatchingCriteria}
+	</dd>
+	<dt>
+		Number deleted:
+	</dt>
+	<dd>
+		{typo3TempData.numberOfDeletedFiles}
+	</dd>
+</dl>
+
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+
+	<fieldset>
+		<ol>
+			<li>
+				<label for="t3-install-delete">
+					Delete files by condition
+				</label>
+				<select
+					id="t3-install-delete"
+					name="install[values][condition]"
+				>
+					<option value="0">All</option>
+					<option value="day" {f:if(condition:'{typo3TempData.selectedCondition} == \'day\'', then:'selected="selected"')}>Last acces more than a day ago</option>
+					<option value="week" {f:if(condition:'{typo3TempData.selectedCondition} == \'week\'', then:'selected="selected"')}>Last acces more than a week ago</option>
+					<option value="month" {f:if(condition:'{typo3TempData.selectedCondition} == \'month\'', then:'selected="selected"')}>Last acces more than a month ago</option>
+					<option value="10" {f:if(condition:'{typo3TempData.selectedCondition} == \'10\'', then:'selected="selected"')}>File size greater than 10K</option>
+					<option value="50" {f:if(condition:'{typo3TempData.selectedCondition} == \'50\'', then:'selected="selected"')}>File size greater than 50K</option>
+					<option value="100" {f:if(condition:'{typo3TempData.selectedCondition} == \'100\'', then:'selected="selected"')}>File size greater than 100K</option>
+				</select>
+			</li>
+
+			<li>
+				<label for="t3-install-action">
+					Number of files at a time:
+				</label>
+				<select
+					id="t3-install-action"
+					name="install[values][numberOfFiles]"
+				>
+					<option value="0">Don't delete, just display statistics</option>
+					<option value="500" {f:if(condition:'{typo3TempData.numberOfFiles} == \'500\'', then:'selected="selected"')}>Delete 500</option>
+					<option value="1000" {f:if(condition:'{typo3TempData.numberOfFiles} == \'1000\'', then:'selected="selected"')}>Delete 1000</option>
+					<option value="5000" {f:if(condition:'{typo3TempData.numberOfFiles} == \'5000\'', then:'selected="selected"')}>Delete 5000</option>
+				</select>
+			</li>
+
+			<li>
+				<label for="t3-install-subdirectory">
+					From sub-directory:
+				</label>
+				<select
+					id="t3-install-subdirectory"
+					name="install[values][subDirectory]"
+				>
+					<f:for each="{typo3TempData.subDirectories}" as="subDirectory">
+						<option
+							value="{subDirectory.name}"
+							{f:if(condition:subDirectory.selected, then:'selected="selected"')}
+						>
+							<f:if condition="{subDirectory.name}">
+								{subDirectory.name}/ (Files: {subDirectory.filesNumber})
+							</f:if>
+						</option>
+					</f:for>
+				</select>
+			</li>
+		</ol>
+	</fieldset>
+
+	<f:render
+		partial="Action/Common/SubmitButton"
+		arguments="{name:'deleteTypo3TempFiles', text:'Execute'}"
+	/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ChangeSiteName.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ChangeSiteName.html
new file mode 100644
index 000000000000..cd2c87cbc211
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ChangeSiteName.html
@@ -0,0 +1,19 @@
+<h4>Change site name</h4>
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<fieldset>
+		<ol>
+			<li>
+				<label for="t3-install-form-sitename">Site name:</label>
+				<input
+					id="t3-install-form-sitename"
+					type="text"
+					name="install[values][newSiteName]"
+					value="{siteName}"
+					class="t3-install-form-input-text"
+				/>
+			</li>
+		</ol>
+	</fieldset>
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'changeSiteName', text:'Change name'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CreateAdministrator.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CreateAdministrator.html
new file mode 100644
index 000000000000..0924c46afaeb
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CreateAdministrator.html
@@ -0,0 +1,40 @@
+<h4>Create backend administrator user</h4>
+<p>
+	You should use this function only if there are no admin users in the database, for instance if this is a blank database.
+	After you've created the user, log in and add the rest of the user information, like email and real name.
+</p>
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<fieldset>
+		<ol>
+			<li>
+				<label for="t3-install-username">Username:</label>
+				<input
+					id="t3-install-username"
+					class="t3-install-form-input-text"
+					type="text"
+					name="install[values][newUserUsername]"
+				/>
+			</li>
+			<li>
+				<label for="t3-install-password">Password:</label>
+				<input
+					id="t3-install-password"
+					class="t3-install-form-input-text t3-install-form-password-strength"
+					type="password"
+					name="install[values][newUserPassword]"
+				/>
+			</li>
+			<li>
+				<label for="t3-install-password-repeat">Password again:</label>
+				<input
+					id="t3-install-password-repeat"
+					class="t3-install-form-input-text"
+					type="password"
+					name="install[values][newUserPasswordCheck]"
+				/>
+			</li>
+		</ol>
+	</fieldset>
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'createAdministrator', text:'Create administrator'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerButton.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerButton.html
new file mode 100644
index 000000000000..ada7febf1399
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerButton.html
@@ -0,0 +1,12 @@
+<h4>Database analyzer</h4>
+
+<p>
+	The database analyzer compares the database table and field definition of the
+	current database with the specification from all loaded extensions ext_tables.sql.
+	Depending on the specification, the analyzer can update, delete and change tables
+	and fields.
+</p>
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'databaseAnalyzerAnalyze', text:'Compare current database with specification'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerData.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerData.html
new file mode 100644
index 000000000000..69a93e9f494c
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerData.html
@@ -0,0 +1,85 @@
+<h4>Database analyzer</h4>
+
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<input type="hidden" name="install[set][databaseAnalyzerAnalyze]" />
+
+	<f:if condition="{databaseAnalyzerSuggestion.addTable}">
+		<f:render
+			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
+			arguments="{
+				key: 'addTable',
+				label: 'Add tables',
+				data: '{databaseAnalyzerSuggestion.addTable}'
+			}"
+		/>
+	</f:if>
+
+	<f:if condition="{databaseAnalyzerSuggestion.addField}">
+		<f:render
+			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
+			arguments="{
+				key: 'addField',
+				label: 'Add fields to tables',
+				data: '{databaseAnalyzerSuggestion.addField}'
+			}"
+		/>
+	</f:if>
+
+	<f:if condition="{databaseAnalyzerSuggestion.change}">
+		<f:render
+			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
+			arguments="{
+				key: 'change',
+				label: 'Change fields',
+				data: '{databaseAnalyzerSuggestion.change}'
+			}"
+		/>
+	</f:if>
+
+	<f:if condition="{databaseAnalyzerSuggestion.renameTableToUnused}">
+		<f:render
+			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
+			arguments="{
+				key: 'renameTableToUnused',
+				label: 'Remove tables (rename with prefix)',
+				data: '{databaseAnalyzerSuggestion.renameTableToUnused}'
+			}"
+		/>
+	</f:if>
+
+	<f:if condition="{databaseAnalyzerSuggestion.renameTableFieldToUnused}">
+		<f:render
+			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
+			arguments="{
+				key: 'renameTableFieldToUnused',
+				label: 'Remove unused fields (rename with prefix)',
+				data: '{databaseAnalyzerSuggestion.renameTableFieldToUnused}'
+			}"
+		/>
+	</f:if>
+
+	<f:if condition="{databaseAnalyzerSuggestion.deleteField}">
+		<f:render
+			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
+			arguments="{
+				key: 'deleteField',
+				label: 'Drop fields (really!)',
+				data: '{databaseAnalyzerSuggestion.deleteField}'
+			}"
+		/>
+	</f:if>
+
+	<f:if condition="{databaseAnalyzerSuggestion.deleteTable}">
+		<f:render
+			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
+			arguments="{
+				key: 'deleteTable',
+				label: 'Drop tables (really!)',
+				data: '{databaseAnalyzerSuggestion.deleteTable}'
+			}"
+		/>
+	</f:if>
+
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'databaseAnalyzerExecute', text:'Execute'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion.html
new file mode 100644
index 000000000000..96e29d099817
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion.html
@@ -0,0 +1,25 @@
+<fieldset>
+	<legend>{label}</legend>
+	<ol>
+		<li class="t3-install-form-label-after">
+			<input type="checkbox" class="checkall" id="t3-install-{key}-checkbox">
+			<label for="t3-install-{key}-checkbox">select/deselect all</label>
+		</li>
+		<f:for each="{data}" as="field">
+			<li class="t3-install-form-label-after">
+				<input type="checkbox" id="t3-install-db-{field.hash}" name="install[values][{field.hash}]" value="1">
+				<label for="t3-install-db-{field.hash}">
+					{field.statement}
+					<f:if condition="{field.current}">
+						<br />
+						Current value: {field.current}
+					</f:if>
+					<f:if condition="{field.count}">
+						<br />
+						{field.count}
+					</f:if>
+				</label>
+			</li>
+		</f:for>
+	</ol>
+</fieldset>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/NewInstallToolPassword.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/NewInstallToolPassword.html
new file mode 100644
index 000000000000..8a5379122943
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/NewInstallToolPassword.html
@@ -0,0 +1,27 @@
+<h4>Change install tool password</h4>
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<fieldset>
+		<ol>
+			<li>
+				<label for="t3-install-password">Enter new password:</label>
+				<input
+						id="t3-install-password"
+						class="t3-install-form-input-text t3-install-form-password-strength"
+						type="password"
+						name="install[values][newInstallToolPassword]"
+						/>
+			</li>
+			<li>
+				<label for="t3-install-password-repeat">Enter again:</label>
+				<input
+						id="t3-install-password-repeat"
+						class="t3-install-form-input-text"
+						type="password"
+						name="install[values][newInstallToolPasswordCheck]"
+						/>
+			</li>
+		</ol>
+	</fieldset>
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'changeInstallToolPassword', text:'Set new password'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/SetNewEncryptionKey.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/SetNewEncryptionKey.html
new file mode 100644
index 000000000000..5135a7c62fc0
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/SetNewEncryptionKey.html
@@ -0,0 +1,11 @@
+<h4>Change encryption key</h4>
+<p>
+	The encryption key is a random string that should be unique for this TYPO3 CMS instance.
+	It is a security relevant value and is never outputted directly.
+	Setting a new encryption key will invalidate temporary information and might invalidate URLs, so all
+	caches should be cleared afterwards. Additionally, you will be logged out from the install tool.
+</p>
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'changeEncryptionKey', text:'Set a new encryption key'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/SystemInformation.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/SystemInformation.html
new file mode 100644
index 000000000000..58fd11a14c21
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/SystemInformation.html
@@ -0,0 +1,22 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<h4>Main system information</h4>
+
+<dl id="systemInformation">
+	<dt>Operating system:</dt>
+	<dd>{operatingSystem}</dd>
+	<dt>PHP version:</dt>
+	<dd><i:constant name="PHP_VERSION" /></dd>
+	<dt>PHP CGI detected:</dt>
+	<dd>{f:if(condition:cgiDetected, then:'Yes', else:'No')}</dd>
+	<dt>Database name:</dt>
+	<dd>{databaseName} </dd>
+	<dt>Database username:</dt>
+	<dd>{databaseUsername} </dd>
+	<dt>Database host:</dt>
+	<dd>{databaseHost} </dd>
+	<dt>Database port:</dt>
+	<dd>{databasePort} </dd>
+	<dt>Database tables:</dt>
+	<dd>{databaseNumberOfTables} </dd>
+</dl>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/AboutImageHandling.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/AboutImageHandling.html
new file mode 100644
index 000000000000..287e05a1f093
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/AboutImageHandling.html
@@ -0,0 +1,60 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<div class="toggleGroup">
+	<div class="toggleButton">
+		<h4>About image handling</h4>
+	</div>
+
+	<div class="toggleData" style="display:none">
+		<p>
+			TYPO3 is known for its ability to process images on the server.
+		</p>
+		<p>
+			In the backend interface (TBE) thumbnails are automatically generated
+			(by ImageMagick in thumbs.php) as well as icons, menu items and pane tabs (by GDLib).
+			In the frontend all kinds of graphical elements are processed. Typically images are
+			scaled down to fit the pages (by ImageMagick) and menu items, graphical headers and
+			such are generated automatically (by GDLib + ImageMagick). In addition TYPO3 is able
+			to handle many file formats (thanks to ImageMagick), for example TIF, BMP, PCX, TGA,
+			AI and PDF in addition to the standard web formats; JPG, GIF, PNG.
+		</p>
+		<p>
+			In order to do this, TYPO3 uses two sets of tools:
+		</p>
+		<strong>
+			ImageMagick / GraphicsMagick:
+		</strong>
+		<p>
+			For conversion of non-web formats to webformats, combining images with alpha-masks,
+			performing image-effects like blurring and sharpening.
+		</p>
+		<p>
+			ImageMagick is a collection of external programs on the server called by the exec()
+			function in PHP. TYPO3 uses three of these, namely 'convert' (converting fileformats,
+			scaling, effects), 'combine'/'composite' (combining images with masks) and 'identify'
+			(returns image information). GraphicsMagick is an alternative to ImageMagick and can
+			be enabled by setting [GFX][im_version_5] to 'gm'. This is recommended and enabled
+			by default. Because ImageMagick and Graphicsmagick are external programs, a requirement
+			must be met: The programs must be installed on the server and working. ImageMagick is
+			available for both Windows and Unix. The current version is 6+. ImageMagick homepage is
+			at <a href="http://www.imagemagick.org/">http://www.imagemagick.org/</a>
+		</p>
+		<strong>
+			GDLib:
+		</strong>
+		<p>
+			For drawing boxes and rendering text on images with truetype fonts. Also used for
+			icons, menuitems and generally the TypoScript GIFBUILDER object is based on GDlib,
+			but extensively utilizing ImageMagick to process intermediate results.
+		</p>
+		<p>
+			GDLib is accessed through internal functions in PHP, you'll need a version of PHP
+			with GDLib compiled in. Also in order to use TrueType fonts with GDLib you'll
+			need FreeType compiled in as well.
+		</p>
+		<p>
+			You can disable all image processing options in TYPO3 ([GFX][image_processing]=0),
+			but that would seriously disable TYPO3.
+		</p>
+	</div>
+</div>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CombiningImages.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CombiningImages.html
new file mode 100644
index 000000000000..1c2c2d950550
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CombiningImages.html
@@ -0,0 +1,34 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<f:if condition="{combiningImagesTested}">
+		<f:then>
+
+			<f:render partial="Action/Tool/TestSetup/AboutImageHandling" arguments="{_all}" />
+			<f:render partial="Action/Tool/TestSetup/VerifyTestResults" arguments="{_all}" />
+			<f:render partial="Action/Tool/TestSetup/CurrentConfiguration" arguments="{_all}" />
+
+			<p></p>
+
+			<h4>Combining images</h4>
+
+			<p>
+				This verifies that the ImageMagick tool, 'combine'/'composite', is able to
+				combine two images through a grayscale mask.
+			</p>
+			<p>
+				If the masking seems to work but inverted, that just means you'll have to make
+				sure the invert flag is set (some combination of im_negate_mask/im_imvMaskState)
+			</p>
+
+			<f:for each="{testResults}" as="test">
+				<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
+			</f:for>
+		</f:then>
+		<f:else>
+			<h4>Combining images</h4>
+		</f:else>
+	</f:if>
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testCombiningImages', text:'Test combining images'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ConvertImageFormatsToJpg.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ConvertImageFormatsToJpg.html
new file mode 100644
index 000000000000..5fdbd78067d6
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ConvertImageFormatsToJpg.html
@@ -0,0 +1,45 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<f:if condition="{convertImageFormatsToJpgTested}">
+		<f:then>
+
+			<f:render partial="Action/Tool/TestSetup/AboutImageHandling" arguments="{_all}" />
+			<f:render partial="Action/Tool/TestSetup/VerifyTestResults" arguments="{_all}" />
+			<f:render partial="Action/Tool/TestSetup/CurrentConfiguration" arguments="{_all}" />
+
+			<p></p>
+
+			<h4>Convert image formats to jpg</h4>
+
+			<p>
+				This verifies that your ImageMagick installation is able to read the default
+				formats jpg, gif, png, tif, bmp, pcx, tga, pdf and ai. The tool 'identify' is
+				used to read the pixeldimensions of non-web formats and 'convert' is used to
+				read the image and convert it to jpg.
+			</p>
+
+			<div class="typo3-message message-notice">
+				<div class="header-container">
+					<div class="message-header">
+						<strong>Dark images</strong>
+					</div>
+				</div>
+				<div class="message-body">
+					In case the images appear remarkably darker than the reference images,
+					try to set [TYPO3_CONF_VARS][GFX][colorspace] = sRGB.
+				</div>
+			</div>
+			<p></p>
+
+			<f:for each="{testResults}" as="test">
+				<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
+			</f:for>
+		</f:then>
+		<f:else>
+			<h4>Convert image formats to jpg</h4>
+		</f:else>
+	</f:if>
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testConvertImageFormatsToJpg', text:'Test image formats'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CurrentConfiguration.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CurrentConfiguration.html
new file mode 100644
index 000000000000..6d4eae117c81
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CurrentConfiguration.html
@@ -0,0 +1,81 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<div class="toggleGroup">
+	<div class="toggleButton">
+		<h4>Current configuration</h4>
+	</div>
+
+	<div class="toggleData" style="display:none">
+		<dl class="t3-install-definitionlist">
+			<dt>
+				{f:if(condition:'{imageConfiguration.imageMagickOrGraphicsMagick} == \'im\'', then:'ImageMagick', else:'GrapicsMagick')} enabled:
+			</dt>
+			<dd>
+				{f:if(condition:imageConfiguration.imageMagickEnabled, then:'Yes', else:'No')}
+			</dd>
+
+			<dt>
+				ImageMagick or GraphicsMagick:
+			</dt>
+			<dd>
+				{f:if(condition:'{imageConfiguration.imageMagickOrGraphicsMagick} == \'im\'', then:'ImageMagick', else:'GrapicsMagick')}
+			</dd>
+
+			<dt>
+				{f:if(condition:'{imageConfiguration.imageMagickOrGraphicsMagick} == \'im\'', then:'ImageMagick', else:'GrapicsMagick')} path:
+			</dt>
+			<dd>
+				{imageConfiguration.imageMagickPath}
+			</dd>
+
+			<dt>
+				{f:if(condition:'{imageConfiguration.imageMagickOrGraphicsMagick} == \'im\'', then:'ImageMagick', else:'GrapicsMagick')} version:
+			</dt>
+			<dd>
+				{imageConfiguration.imageMagickVersion}
+			</dd>
+
+			<dt>
+				IM5 effects enabled:
+			</dt>
+			<dd>
+				{imageConfiguration.imageMagick5Effecs} <span>(Blurring/Sharpening with IM 5+)</span>
+			</dd>
+
+			<dt>
+				ImageMagick mask invert:
+			</dt>
+			<dd>
+				{imageConfiguration.imageMagickMaskInvert} <span>(Should be set for some IM versions approx. 5.4+)</span>
+			</dd>
+
+			<dt>
+				GDLib enabled:
+			</dt>
+			<dd>
+				{f:if(condition:imageConfiguration.gdlibEnabled, then:'Yes', else:'No')}
+			</dd>
+
+			<dt>
+				GDLib using PNG:
+			</dt>
+			<dd>
+				{imageConfiguration.gdlibPng}
+			</dd>
+
+			<dt>
+				Freetype DPI:
+			</dt>
+			<dd>
+				{imageConfiguration.freeTypeDpi} <span>(Should be 96 for Freetype 2)</span>
+			</dd>
+
+			<dt>
+				File Formats:
+			</dt>
+			<dd>
+				{imageConfiguration.fileFormats}
+			</dd>
+		</dl>
+	</div>
+</div>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/DisplayTwinImage.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/DisplayTwinImage.html
new file mode 100644
index 000000000000..638e25a49bf3
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/DisplayTwinImage.html
@@ -0,0 +1,72 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<h4>{test.title}</h4>
+
+<f:if condition="{test.message}">
+	<f:render partial="Action/Common/StatusMessage" arguments="{message: test.message}" />
+</f:if>
+
+<f:if condition="{test.error}">
+	<f:then>
+		<f:render partial="Action/Common/StatusMessage" arguments="{message: test.error}"/>
+	</f:then>
+	<f:else>
+		<table class="t3-install-displaytwinimageimages">
+			<tbody>
+				<tr>
+					<td>
+						<strong>Reference</strong>
+					</td>
+					<td>
+						<strong>Your system</strong>
+					</td>
+				</tr>
+				<tr>
+					<td>
+						<img src="../../../../{test.referenceFile -> i:file.relativePath()}?{time}" />
+					</td>
+					<td>
+						<f:if condition="{test.outputFile}">
+							<f:then>
+								<img src="../../../../{test.outputFile -> i:file.relativePath()}?{time}" />
+							</f:then>
+							<f:else>
+								<div class="typo3-message message-error" >
+									<div class="header-container">
+										<div class="message-header"><strong>No image</strong></div>
+									</div>
+									<div class="message-body">
+										Your system generated no image at all. This is probaly a misconfiguration.
+									</div>
+								</div>
+							</f:else>
+						</f:if>
+					</td>
+				</tr>
+				<tr>
+					<td>
+						{test.referenceFile -> i:file.size()},
+						{test.referenceFile -> i:file.imageDimension()}
+						x {test.referenceFile -> i:file.imageDimension(dimension:'height')} pixel
+					</td>
+					<td>
+						<f:if condition="{test.outputFile}">
+							<f:then>
+								{test.outputFile -> i:file.size()},
+								{test.outputFile -> i:file.imageDimension()}
+								x {test.outputFile -> i:file.imageDimension(dimension:'height')} pixel
+							</f:then>
+						</f:if>
+					</td>
+				</tr>
+			</tbody>
+		</table>
+		<f:if condition="{test.command}">
+			<div class="t3-install-displaytwinimagetextarea">
+				{i:format.imageMagickCommands(commands:test.command)}
+			</div>
+		</f:if>
+	</f:else>
+</f:if>
+
+<p></p>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Gdlib.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Gdlib.html
new file mode 100644
index 000000000000..f297ae69266c
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Gdlib.html
@@ -0,0 +1,29 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<f:if condition="{gdlibTested}">
+		<f:then>
+
+			<f:render partial="Action/Tool/TestSetup/AboutImageHandling" arguments="{_all}" />
+			<f:render partial="Action/Tool/TestSetup/VerifyTestResults" arguments="{_all}" />
+			<f:render partial="Action/Tool/TestSetup/CurrentConfiguration" arguments="{_all}" />
+
+			<p></p>
+
+			<h4>GDlib</h4>
+
+			<p>
+				This verifies that the GDLib installation works properly.
+			</p>
+
+			<f:for each="{testResults}" as="test">
+				<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
+			</f:for>
+		</f:then>
+		<f:else>
+			<h4>GDlib</h4>
+		</f:else>
+	</f:if>
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testGdlib', text:'Test GDLib'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Mail.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Mail.html
new file mode 100644
index 000000000000..08bb9e319a54
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Mail.html
@@ -0,0 +1,28 @@
+<h4>Mail setup</h4>
+
+<p>
+	You can check the basic mail functionality by entering your email address here and press the button.
+	You should then receive a testmail from "typo3installtool@example.org".
+</p>
+
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<fieldset>
+		<ol>
+			<li>
+				<label
+					for="t3-install-checkmail"
+				>
+					Email address:
+				</label>
+				<input
+					id="t3-install-checkmail"
+					type="text"
+					name="install[values][testEmailRecipient]"
+					class="t3-install-form-input-text"
+				/>
+			</li>
+		</ol>
+	</fieldset>
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testMail', text:'Send test mail'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ScalingImages.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ScalingImages.html
new file mode 100644
index 000000000000..0f2033ce6be0
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ScalingImages.html
@@ -0,0 +1,28 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<f:if condition="{scalingImagesTested}">
+		<f:then>
+			<f:render partial="Action/Tool/TestSetup/AboutImageHandling" arguments="{_all}" />
+			<f:render partial="Action/Tool/TestSetup/VerifyTestResults" arguments="{_all}" />
+			<f:render partial="Action/Tool/TestSetup/CurrentConfiguration" arguments="{_all}" />
+
+			<p></p>
+
+			<h4>Scaling images</h4>
+
+			<p>
+				This shows how ImageMagick reacts when scaling transparent GIF and PNG files.
+			</p>
+
+			<f:for each="{testResults}" as="test">
+				<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
+			</f:for>
+		</f:then>
+		<f:else>
+			<h4>Scaling images</h4>
+		</f:else>
+	</f:if>
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testScalingImages', text:'Test scaling images'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/TrueTypeFontDpi.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/TrueTypeFontDpi.html
new file mode 100644
index 000000000000..9f9bb758c5e0
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/TrueTypeFontDpi.html
@@ -0,0 +1,10 @@
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<h4>True type font dpi settings</h4>
+	<f:if condition="{trueTypeFontDpiTested}">
+		<f:for each="{testResults}" as="test">
+			<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
+		</f:for>
+	</f:if>
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testTrueTypeFontDpi', text:'Test true type font dpi'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/VerifyTestResults.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/VerifyTestResults.html
new file mode 100644
index 000000000000..cef915611ecd
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/VerifyTestResults.html
@@ -0,0 +1,23 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<div class="toggleGroup">
+	<div class="toggleButton">
+		<h4>Verify test results</h4>
+	</div>
+
+	<div class="toggleData" style="display:none">
+		<p>
+			This page performs image processing and displays the result. It's a thorough check
+			that everything you've configured is working correctly.
+		</p>
+		<p>
+			It's quite simple to verify your installation; Just look down the page, the images
+			in pairs should look like each other. If some images are not alike, something is
+			wrong. You may also notice warnings and errors if this tool found signs of any problems.
+		</p>
+		<p>
+			The image to the left is the reference image (how it should be) and to the right
+			the image made by your server.
+		</p>
+	</div>
+</div>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/WriteGifAndPng.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/WriteGifAndPng.html
new file mode 100644
index 000000000000..ca6a85049d8e
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/WriteGifAndPng.html
@@ -0,0 +1,31 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<f:if condition="{writeGifAndPngTested}">
+		<f:then>
+
+			<f:render partial="Action/Tool/TestSetup/AboutImageHandling" arguments="{_all}" />
+			<f:render partial="Action/Tool/TestSetup/VerifyTestResults" arguments="{_all}" />
+			<f:render partial="Action/Tool/TestSetup/CurrentConfiguration" arguments="{_all}" />
+
+			<p></p>
+
+			<h4>Writing gif and png</h4>
+
+			<p>
+				This verifies that ImageMagick is able to write GIF and PNG files.
+				The GIF-file isattempted compressed with LZW by the
+				\TYPO3\CMS\Core\Utility\GeneralUtility::gif_compress() function.
+			</p>
+
+			<f:for each="{testResults}" as="test">
+				<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
+			</f:for>
+		</f:then>
+		<f:else>
+			<h4>Writing gif and png</h4>
+		</f:else>
+	</f:if>
+	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testWriteGifAndPng', text:'Test image formats'}"/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/GetUserInput.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/GetUserInput.html
new file mode 100644
index 000000000000..4159f76101b4
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/GetUserInput.html
@@ -0,0 +1,22 @@
+<form method="post">
+	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+	<input type="hidden" name="install[values][identifier]" value="{updateWizardData.identifier}"/>
+
+	<h4>{updateWizardData.title}</h4>
+
+	<f:format.raw>{updateWizardData.wizardHtml}</f:format.raw>
+
+	<fieldset>
+		<ol>
+			<li class="t3-install-form-label-after">
+				<input id="t3-install-showdatabasequeries" type="checkbox" name="install[values][showDatabaseQueries]" value="1" />
+				<label for="t3-install-showdatabasequeries">Show database queries performed</label>
+			</li>
+		</ol>
+	</fieldset>
+
+	<f:render
+		partial="Action/Common/SubmitButton"
+		arguments="{name:'performUpdate', text:'Perform updates!'}"
+	/>
+</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/ListUpdates.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/ListUpdates.html
new file mode 100644
index 000000000000..23ef33124356
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/ListUpdates.html
@@ -0,0 +1,42 @@
+<p>
+	If you upgrade your TYPO3 installation from one major version to another (e.g. 6.1 to 6.2),
+	then the Upgrade Wizards guide you through the necessary steps to upgrade your database
+	records or explicitly install extensions that ship with the latest TYPO3 version.
+</p>
+<hr />
+
+<f:if condition="{availableUpdates}">
+	<f:then>
+		<f:for each="{availableUpdates}" as="availableUpdate">
+			<form method="post">
+				<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+				<input type="hidden" name="install[values][identifier]" value="{availableUpdate.identifier}"/>
+				<h4>{availableUpdate.title}</h4>
+				<f:format.raw>{availableUpdate.explanation}</f:format.raw>
+				<f:if condition="{availableUpdate.renderNext}">
+					<f:render
+						partial="Action/Common/SubmitButton"
+						arguments="{name:'getUserInput', text:'Next'}"
+					/>
+				</f:if>
+				<hr />
+			</form>
+		</f:for>
+	</f:then>
+	<f:else>
+		<p>
+			<strong>No updates to perform!</strong>
+		</p>
+		<hr />
+	</f:else>
+</f:if>
+
+<h4>Final step</h4>
+<p>
+	When all updates are done you should check your database for required updates.
+	<br />
+	Perform the database analyzer steps until no more changes are required.
+</p>
+<a href="Install.php?install[action]=importantActions&install[context]={context}&install[controller]=tool">
+	Go to database analyzer
+</a>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/PerformUpdate.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/PerformUpdate.html
new file mode 100644
index 000000000000..53881a091652
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpdateWizard/PerformUpdate.html
@@ -0,0 +1,32 @@
+<p class="innerWidth">
+	<strong>{wizardData.title}</strong>
+</p>
+
+<f:if condition="{wizardData.wizardInputBroken}">
+	<f:then>
+		<a href="javascript:history.back()">
+			Go back to update configuration
+		</a>
+	</f:then>
+
+	<f:else>
+		<f:if condition="{wizardData.queries}">
+			<f:for each="{wizardData.queries}" as="query">
+				{query}
+				<br />
+			</f:for>
+		</f:if>
+	</f:else>
+</f:if>
+
+<f:if condition="{nextUpdateWizardIdentifier}">
+	<form method="post">
+		<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+		<input type="hidden" name="install[values][identifier]" value="{nextUpdateWizardIdentifier}"/>
+		<f:render
+			partial="Action/Common/SubmitButton"
+			arguments="{name:'getUserInput', text:'Go to the next update wizard'}"
+		/>
+		<hr />
+	</form>
+</f:if>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Common/InstallToolDisabled.html b/typo3/sysext/install/Resources/Private/Templates/Action/Common/InstallToolDisabled.html
new file mode 100644
index 000000000000..99a581fcb168
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Common/InstallToolDisabled.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>No install tool password set</title>
+	<link rel="stylesheet" type="text/css" href="../Resources/Public/Stylesheets/Action/Common/EarlyExit.css?{time}" />
+</head>
+<body>
+<div id="container">
+	<h1>TYPO3</h1>
+	<div class="typo3-message message-warning">
+		<h2>The Install Tool is locked</h2>
+		<p>
+			To enable the Install Tool, the file ENABLE_INSTALL_TOOL must be created.
+		</p>
+		<ul>
+			<li>
+				In the typo3conf/ folder, create a file named ENABLE_INSTALL_TOOL. The file name is
+				case sensitive, but the file itself can simply be an empty file.
+			</li>
+			<li>
+				You are recommended to log out from the Install Tool after finishing your work.
+				The file will then automatically be deleted.
+			</li>
+		</ul>
+		<p>
+			For security reasons, it is highly recommended that you either rename or delete the file after the operation is finished.
+		</p>
+		<p>
+			As an additional security measure, if the file is older than one hour, TYPO3 will automatically delete it. The file must be writable by the web server user.
+		</p>
+	</div>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Common/InstallToolPasswordNotSet.html b/typo3/sysext/install/Resources/Private/Templates/Action/Common/InstallToolPasswordNotSet.html
new file mode 100644
index 000000000000..e8aefa2d1849
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Common/InstallToolPasswordNotSet.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>No install tool password set</title>
+	<link rel="stylesheet" type="text/css" href="../Resources/Public/Stylesheets/Action/Common/EarlyExit.css?{time}" />
+</head>
+<body>
+<div id="container">
+	<h1>TYPO3</h1>
+	<div class="typo3-message message-warning">
+		<h2>No install tool password set</h2>
+		<p>
+			No install tool password was set, access to install tool is denied for security reasons.
+		</p>
+		<p>
+			The file typo3conf/LocalConfiguration.php does not contain a password of the install tool.
+			This should have been set during installation. You can gain access to the install tool
+			login form by setting ['BE']['installToolPassword'] to the md5 sum of any chosen password.
+		</p>
+	</div>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Common/Login.html b/typo3/sysext/install/Resources/Private/Templates/Action/Common/Login.html
new file mode 100644
index 000000000000..75f27e84fcab
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Common/Login.html
@@ -0,0 +1,51 @@
+<f:comment>
+	Login form is significantly different from other install tool actions:
+	It does not render the menu and loads other css. So, it does not use
+	the 'InstallToolAuthenticated' layout and just renders its adapted
+	content from a partial.
+	The loginForm however does respect the context, so it renders a docheader
+	if called by the backend, or a the standalone content if not.
+</f:comment>
+
+<f:if condition="{context} == 'backend'">
+	<f:then>
+		<!DOCTYPE html>
+		<html>
+		<head>
+			<title>Install tool login</title>
+			<f:render partial="Action/Common/Headers" arguments="{_all}" />
+			<link rel="stylesheet" type="text/css" href="../Resources/Public/Stylesheets/Action/Common/Login.css?{time}" />
+			<link rel="stylesheet" type="text/css" href="../../../sysext/t3skin/stylesheets/visual/element_docheader.css?{time}" />
+			<link rel="stylesheet" type="text/css" href="../../../sysext/t3skin/stylesheets/structure/element_docheader.css?{time}" />
+		</head>
+		<body>
+		<div id="typo3-docheader">
+			<div class="typo3-docheader-functions"></div>
+			<div class="typo3-docheader-buttons"></div>
+		</div>
+		<div id="typo3-docbody">
+			<div id="typo3-inner-docbody">
+				<div id="t3-install-outer" class="t3-install-login">
+					<f:render partial="Action/Common/LoginForm.html" arguments="{_all}" />
+				</div>
+			</div>
+		</div>
+		</body>
+		</html>
+	</f:then>
+	<f:else>
+		<!DOCTYPE html>
+		<html>
+		<head>
+			<title>Install tool login</title>
+			<f:render partial="Action/Common/Headers" arguments="{_all}" />
+			<link rel="stylesheet" type="text/css" href="../Resources/Public/Stylesheets/Action/Common/Login.css?{time}" />
+		</head>
+		<body class="standalone">
+		<div id="t3-install-outer" class="t3-install-login">
+			<f:render partial="Action/Common/LoginForm.html" arguments="{_all}" />
+		</div>
+		</body>
+		</html>
+	</f:else>
+</f:if>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseConnect.html b/typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseConnect.html
new file mode 100644
index 000000000000..2b4f2e7f9349
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseConnect.html
@@ -0,0 +1,27 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="Step" />
+
+<f:section name="Content">
+	<h3>Connect to your database host</h3>
+
+	<p>
+		If you have not already created a username and password to access the database, please do so now.
+		This can be done using tools provided by your host.
+	</p>
+
+	<f:if condition="{isDbalEnabled}">
+		<f:then>
+			<f:render partial="Action/Step/DatabaseConnect/DbalDriverSelection" arguments="{_all}" />
+			<f:if condition="{selectedDbalDriver}">
+				<f:render partial="Action/Step/DatabaseConnect/ConnectDetails" arguments="{_all}" />
+			</f:if>
+			<f:render partial="Action/Step/DatabaseConnect/UnloadDbal" arguments="{_all}" />
+		</f:then>
+
+		<f:else>
+			<f:render partial="Action/Step/DatabaseConnect/ConnectDetails" arguments="{_all}" />
+			<f:render partial="Action/Step/DatabaseConnect/LoadDbal" arguments="{_all}" />
+		</f:else>
+	</f:if>
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseData.html b/typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseData.html
new file mode 100644
index 000000000000..fde062d63c0d
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseData.html
@@ -0,0 +1,66 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="Step" />
+
+<f:section name="Content">
+
+	<h3>Create user and import base data</h3>
+
+	<p>
+		Import basic database structure and create a backend administrator user.
+		The password can be used to log in to the install tool and to the TYPO3 CMS backend with username "admin".
+	</p>
+
+	<p>
+		The table import will drop possibly existing tables!
+	</p>
+
+	<form method="post" id="stepInstaller-databaseSelect">
+		<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+		<input type="hidden" value="execute" name="install[set]" />
+
+		<fieldset class="t3-install-form-label-width-7">
+			<ol>
+				<li>
+					<label for="password">Password</label>
+					<input
+						class="t3-install-form-input-text t3-install-form-password-strength"
+						name="install[values][password]"
+						id="password"
+						type="password"
+					/>
+				</li>
+
+				<li>
+					<label for="show-password">Show password</label>
+					<input
+						type="checkbox"
+						id="show-password"
+						onchange="if (this.checked==true) { document.getElementById('password').type='text'; } else { document.getElementById('password').type='password'; }"
+					/>
+				</li>
+			</ol>
+		</fieldset>
+		<hr />
+
+		<fieldset class="t3-install-form-label-width-7">
+			<ol>
+				<li>
+					<label for="sitename">Set a site name</label>
+					<input
+						class="t3-install-form-input-text"
+						name="install[values][sitename]"
+						id="sitename"
+						type="text"
+						value="{siteName}"
+					/>
+				</li>
+			</ol>
+		</fieldset>
+
+		<button type="submit">
+			Continue
+			<span class="t3-install-form-button-icon-positive">&nbsp;</span>
+		</button>
+	</form>
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseSelect.html b/typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseSelect.html
new file mode 100644
index 000000000000..97ffe7924846
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Step/DatabaseSelect.html
@@ -0,0 +1,70 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="Step" />
+
+<f:section name="Content">
+	<h3>Select database</h3>
+
+	You have two options:
+
+	<form method="post" id="stepInstaller-databaseSelect">
+		<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+		<input type="hidden" value="execute" name="install[set]" />
+
+		<fieldset>
+			<ul>
+				<li>
+					<input
+						id="t3-install-form-db-select-type-new"
+						type="radio"
+						name="install[values][type]"
+						value="new"
+						checked="checked"
+						class="radio"
+					/>
+					<div>
+						<label for="t3-install-step-database-new">Create a new database (recommended):</label>
+						<p>Enter a name for your TYPO3 database.</p>
+						<input
+							id="t3-install-step-database-new"
+							class="t3-install-form-input-text"
+							type="text"
+							name="install[values][new]"
+							checked="checked"
+							onfocus="document.getElementById('t3-install-form-db-select-type-new').checked=true;"
+						/>
+					</div>
+				</li>
+
+				<li>
+					<input
+						id="t3-install-form-db-select-type-existing"
+						type="radio"
+						name="install[values][type]"
+						value="existing"
+						class="radio"
+					/>
+					<div>
+						<label for="t3-install-step-database-existing">Select an EMPTY existing database:</label>
+						<p>Any tables used by TYPO3 will be overwritten.</p>
+						<select
+							id="t3-install-step-database-existing"
+							name="install[values][existing]"
+							onfocus="document.getElementById('t3-install-form-db-select-type-existing').checked=true;"
+						>
+							<option value="">Select database</option>
+							<f:for each="{databaseList}" as="database">
+								<option value="{database}">{database}</option>
+							</f:for>
+						</select>
+					</div>
+				</li>
+			</ul>
+		</fieldset>
+
+		<button type="submit">
+			Continue
+			<span class="t3-install-form-button-icon-positive">&nbsp;</span>
+		</button>
+	</form>
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Step/DefaultConfiguration.html b/typo3/sysext/install/Resources/Private/Templates/Action/Step/DefaultConfiguration.html
new file mode 100644
index 000000000000..4a688dfb3b64
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Step/DefaultConfiguration.html
@@ -0,0 +1,23 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="Step" />
+
+<f:section name="Content">
+	<h3>Auto configuration and login</h3>
+
+	<p>
+		Installation done! This last step will set some configuration values based on your
+		system environment and redirects to the TYPO3 CMS backend ready for you to log in
+		with user "admin" and your previously set password.
+	</p>
+
+	<form method="post">
+		<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+		<input type="hidden" value="execute" name="install[set]" />
+
+		<button type="submit">
+			Continue
+			<span class="t3-install-form-button-icon-positive">&nbsp;</span>
+		</button>
+	</form>
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Step/EnvironmentAndFolders.html b/typo3/sysext/install/Resources/Private/Templates/Action/Step/EnvironmentAndFolders.html
new file mode 100644
index 000000000000..27dec64b49b5
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Step/EnvironmentAndFolders.html
@@ -0,0 +1,68 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="Step" />
+
+<f:section name="Content">
+	<h3>System environment check</h3>
+
+	<p>
+		TYPO3 is an enterprise content management system that is powerful, yet easy to install.
+	</p>
+	<p>
+		After some simple steps you'll be ready to add content to your website.
+		This first step checks your system environment and points out issues.
+	</p>
+
+	<f:if condition="{errorsOrWarningsFromStatus}">
+		<f:then>
+			<form method="post">
+				<button type="submit">
+					Fixed. Check again!
+					<span class="t3-install-form-button-icon-positive">&nbsp;</span>
+				</button>
+			</form>
+
+			<form method="post">
+				<input type="hidden" value="environmentAndFolders" name="install[action]" />
+				<input type="hidden" value="execute" name="install[set]" />
+				<button type="submit">
+					I know what I'm doing, continue!
+					<span class="t3-install-form-button-icon-negative">&nbsp;</span>
+				</button>
+			</form>
+		</f:then>
+		<f:else>
+			<form method="post">
+				<input type="hidden" value="environmentAndFolders" name="install[action]" />
+				<input type="hidden" value="execute" name="install[set]" />
+				<button type="submit">
+					System looks good. Continue!
+					<span class="t3-install-form-button-icon-positive">&nbsp;</span>
+				</button>
+			</form>
+		</f:else>
+	</f:if>
+
+	<f:if condition="{errorsOrWarningsFromStatus}">
+		<p>Detailed analysis</p>
+
+		<f:if condition="{structureErrors}">
+			<f:for each="{structureErrors}" as="message">
+				<f:render partial="Action/Common/StatusMessage" arguments="{message: message}" />
+			</f:for>
+		</f:if>
+
+		<f:if condition="{environmentStatus.error}">
+			<f:for each="{environmentStatus.error}" as="message">
+				<f:render partial="Action/Common/StatusMessage" arguments="{message: message}" />
+			</f:for>
+		</f:if>
+
+		<f:if condition="{environmentStatus.warning}">
+			<f:for each="{environmentStatus.warning}" as="message">
+				<f:render partial="Action/Common/StatusMessage" arguments="{message: message}" />
+			</f:for>
+		</f:if>
+	</f:if>
+
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/AllConfiguration.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/AllConfiguration.html
new file mode 100644
index 000000000000..2d5740572f56
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/AllConfiguration.html
@@ -0,0 +1,54 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+
+	<f:if condition="{configurationValuesSaved}">
+		<f:then>
+			<h3>Saved configuration values</h3>
+
+			<f:if condition="{savedConfigurationValueMessages}">
+				<f:then>
+					<f:for each="{savedConfigurationValueMessages}" as="statusMessage">
+						<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
+					</f:for>
+				</f:then>
+
+					<f:else>
+					<div class="typo3-message message-warning">
+						<div class="header-container">
+							<div class="message-header">
+								No values changed
+							</div>
+						</div>
+					</div>
+				</f:else>
+			</f:if>
+
+			<hr />
+
+			<form method="post">
+				<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+				<f:render partial="Action/Common/SubmitButton" arguments="{name:'continue', text:'Continue'}"/>
+			</form>
+		</f:then>
+
+		<f:else>
+			<h3>Change configuration values</h3>
+
+			<form method="post">
+				<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+
+				<f:for each="{data}" as="sectionData" key="sectionName">
+					<f:if condition="{sectionData}">
+						<f:render partial="Action/Tool/AllConfiguration/SubSection" arguments="{_all}" />
+					</f:if>
+				</f:for>
+
+				<f:render partial="Action/Common/SubmitButton" arguments="{name:'write', text:'Write configuration'}"/>
+			</form>
+		</f:else>
+	</f:if>
+
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/CleanUp.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/CleanUp.html
new file mode 100644
index 000000000000..364d3c7a247f
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/CleanUp.html
@@ -0,0 +1,21 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+	<h3>Clean up your installation</h3>
+
+	<f:for each="{actionMessages}" as="statusMessage">
+		<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
+	</f:for>
+
+	<f:render partial="Action/Tool/CleanUp/Typo3TempFiles" arguments="{_all}" />
+	<hr />
+
+	<f:render partial="Action/Tool/CleanUp/ClearTables" arguments="{_all}" />
+	<hr />
+
+	<f:render partial="Action/Tool/CleanUp/ResetBackendUserUc" arguments="{_all}" />
+	<hr />
+
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/FolderStructure.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/FolderStructure.html
new file mode 100644
index 000000000000..807e58e94088
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/FolderStructure.html
@@ -0,0 +1,44 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+	<h3>File and folder status below <i:constant name="PATH_site" /></h3>
+
+	<f:if condition="{fixedStatus}">
+		<h4>Fix action results:</h4>
+		<f:for each="{fixedStatus}" as="statusMessage">
+			<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
+		</f:for>
+		<hr />
+	</f:if>
+
+	<f:if condition="{fixableStatus}">
+		<form method="post">
+			<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+			<f:render partial="Action/Common/SubmitButton" arguments="{name:'fix', text:'Fix errors'}"/>
+		</form>
+		<hr />
+	</f:if>
+
+	<f:if condition="{notFixableStatus}">
+		<h4>These structure elements are not fixable:</h4>
+		<f:for each="{notFixableStatus}" as="statusMessage">
+			<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
+		</f:for>
+	</f:if>
+
+	<f:if condition="{fixableStatus}">
+		<h4>These structure elements are fixable:</h4>
+		<f:for each="{fixableStatus}" as="statusMessage">
+			<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
+		</f:for>
+	</f:if>
+
+	<f:if condition="{okStatus}">
+		<h4>These structures are ok:</h4>
+		<f:for each="{okStatus}" as="statusMessage">
+			<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
+		</f:for>
+	</f:if>
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/ImportantActions.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/ImportantActions.html
new file mode 100644
index 000000000000..c7e574d3634e
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/ImportantActions.html
@@ -0,0 +1,35 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+	<h3>Important actions</h3>
+
+	<f:for each="{actionMessages}" as="statusMessage">
+		<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
+	</f:for>
+
+	<f:render partial="Action/Tool/ImportantActions/SystemInformation" arguments="{_all}" />
+	<hr />
+
+	<f:if condition="{databaseAnalyzerSuggestion}">
+		<f:then>
+			<f:render partial="Action/Tool/ImportantActions/DatabaseAnalyzerData" arguments="{_all}"/>
+		</f:then>
+		<f:else>
+			<f:render partial="Action/Tool/ImportantActions/DatabaseAnalyzerButton" arguments="{_all}"/>
+		</f:else>
+	</f:if>
+	<hr />
+
+	<f:render partial="Action/Tool/ImportantActions/NewInstallToolPassword" arguments="{_all}"/>
+	<hr />
+
+	<f:render partial="Action/Tool/ImportantActions/ChangeSiteName" arguments="{_all}"/>
+	<hr />
+
+	<f:render partial="Action/Tool/ImportantActions/SetNewEncryptionKey" arguments="{_all}"/>
+	<hr />
+
+	<f:render partial="Action/Tool/ImportantActions/CreateAdministrator" arguments="{_all}"/>
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/SystemEnvironment.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/SystemEnvironment.html
new file mode 100644
index 000000000000..3746d5a095c1
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/SystemEnvironment.html
@@ -0,0 +1,13 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+	<h3>System environment check</h3>
+
+	<f:for each="{statusObjectsBySeverity}" as="statusMessages">
+		<f:for each="{statusMessages}" as="statusMessage">
+			<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
+		</f:for>
+	</f:for>
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/TestSetup.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/TestSetup.html
new file mode 100644
index 000000000000..2f62fd7d91cb
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/TestSetup.html
@@ -0,0 +1,32 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+	<h3>Test system settings</h3>
+
+	<f:for each="{actionMessages}" as="statusMessage">
+		<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
+	</f:for>
+
+	<f:render partial="Action/Tool/TestSetup/Mail" arguments="{_all}" />
+	<hr />
+
+	<f:render partial="Action/Tool/TestSetup/TrueTypeFontDpi" arguments="{_all}" />
+	<hr />
+
+	<f:render partial="Action/Tool/TestSetup/ConvertImageFormatsToJpg" arguments="{_all}" />
+	<hr />
+
+	<f:render partial="Action/Tool/TestSetup/WriteGifAndPng" arguments="{_all}" />
+	<hr />
+
+	<f:render partial="Action/Tool/TestSetup/ScalingImages" arguments="{_all}" />
+	<hr />
+
+	<f:render partial="Action/Tool/TestSetup/CombiningImages" arguments="{_all}" />
+	<hr />
+
+	<f:render partial="Action/Tool/TestSetup/Gdlib" arguments="{_all}" />
+	<hr />
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpdateWizard.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpdateWizard.html
new file mode 100644
index 000000000000..53f9ebb37a17
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpdateWizard.html
@@ -0,0 +1,25 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+	<h3>Update wizard</h3>
+
+	<f:for each="{actionMessages}" as="statusMessage">
+		<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
+	</f:for>
+
+
+	<f:if condition="{updateAction} == 'listUpdates'">
+		<f:render partial="Action/Tool/UpdateWizard/ListUpdates" arguments="{_all}" />
+	</f:if>
+
+	<f:if condition="{updateAction} == 'getUserInput'">
+		<f:render partial="Action/Tool/UpdateWizard/GetUserInput" arguments="{_all}" />
+	</f:if>
+
+	<f:if condition="{updateAction} == 'performUpdate'">
+		<f:render partial="Action/Tool/UpdateWizard/PerformUpdate" arguments="{_all}" />
+	</f:if>
+
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Welcome.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Welcome.html
new file mode 100644
index 000000000000..8a9c7dee4353
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Welcome.html
@@ -0,0 +1,146 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+	<h3>Welcome</h3>
+
+	<h4>How to configure TYPO3</h4>
+	<p>
+		Local configuration is done by overriding default values in the
+		included file, typo3conf/LocalConfiguration.php. In this file you enter the
+		database information along with values in the global array
+		TYPO3_CONF_VARS.
+		<br />
+		The options in the TYPO3_CONF_VARS array and how to use it for your
+		own purposes is discussed in the base configuration file,
+		EXT:core/Configuration/DefaultConfiguration.php. This file sets up the default values and
+		subsequently includes the LocalConfiguration.php file in which you can then
+		override values.
+		<br />
+		See this page for <i:constant name="TYPO3_URL_SYSTEMREQUIREMENTS" /> more
+		information about system requirements.</a>
+	</p>
+	<hr />
+
+
+	<h4>Using this script</h4>
+	<p>
+		There are three primary steps for you to take:
+	</p>
+	<p>
+		<strong>1: Basic Configuration</strong>
+		<br />
+		In this step your PHP-configuration is checked. If
+		there are any settings that will prevent TYPO3 from
+		running correctly you'll get warnings and errors
+		with a description of the problem.
+		<br />
+		You'll have to enter a database username, password
+		and hostname. Then you can choose to create a new
+		database or select an existing one.
+		<br />
+		Finally the image processing settings are entered
+		and verified and you can choose to let the script
+		update the configuration with the suggested settings.
+	</p>
+	<p>
+		<strong>2: Database Analyser</strong>
+		<br />
+		In this step you can either install a new database
+		or update the database from any previous TYPO3
+		version.
+		<br />
+		You can also get an overview of extra/missing
+		fields/tables in the database compared to a raw
+		sql-file.
+		<br />
+		The database is also verified against your
+		configuration ($TCA) and you can
+		even see suggestions for entries in $TCA or new
+		fields in the database.
+	</p>
+	<p>
+		<strong>3: Upgrade Wizard</strong>
+		<br />
+		Here you will find update methods taking care of
+		changes to the TYPO3 core which are not backwards
+		compatible.
+		<br />
+		It is recommended to run this wizard after every
+		update to make sure everything will still work
+		flawlessly.
+	</p>
+	<p>
+		<strong>4: Image Processing</strong>
+		<br />
+		This step is a visual guide to verify your
+		configuration of the image processing software.
+		<br />
+		You'll be presented to a list of images that should
+		all match in pairs. If some irregularity appears,
+		you'll get a warning. Thus you're able to track an
+		error before you'll discover it on your website.
+	</p>
+	<p>
+		<strong>5: All Configuration</strong>
+		<br />
+		This gives you access to any of the configuration
+		options in the TYPO3_CONF_VARS array. Every option
+		is also presented with a comment explaining what it
+		does.
+	</p>
+	<p>
+		<strong>6: Cleanup</strong>
+		<br />
+		Here you can clean up the temporary files in typo3temp/
+		folder and the tables used for caching of data in
+		your database.
+	</p>
+	<hr />
+
+
+	<h4>Header legend</h4>
+	<h4 class="typo3-message message-notice">
+		Notice!
+	</h4>
+	<p>
+		Indicates that something is important to be aware of.
+		<br />
+		This does <em>not</em> indicate an error.
+	</p>
+
+	<h4 class="typo3-message message-information">
+		Just information
+	</h4>
+	<p>
+		This is a simple message with some information about something.
+	</p>
+
+	<h4 class="typo3-message message-ok">
+		Check was successful
+	</h4>
+	<p>
+		Indicates that something was checked and returned an expected result.
+	</p>
+
+	<h4 class="typo3-message message-warning">
+		Warning!
+	</h4>
+	<p>
+		Indicates that something may very well cause trouble
+		and you should definitely look into it before proceeding.
+		<br />
+		This indicates a <em>potential</em> error.
+	</p>
+
+	<h4 class="typo3-message message-error">
+		Error!
+	</h4>
+	<p>
+		Indicates that something is definitely wrong and that TYPO3 will most
+		likely not perform as expected if this problem is not solved.
+		<br />
+		This indicates an actual error.
+	</p>
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/AlterPasswordForm.html b/typo3/sysext/install/Resources/Private/Templates/AlterPasswordForm.html
deleted file mode 100644
index 274130b90c98..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/AlterPasswordForm.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Alter Password Form</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<form action="###ACTION###" method="post">
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-password">###ENTERPASSWORD###</label>
-						<input id="t3-install-password" class="t3-install-form-input-text" type="password" name="TYPO3_INSTALL[extConfig][BE][installToolPassword]" />
-					</li>
-					<li>
-						<label for="t3-install-password-repeat">###ENTERAGAIN###</label>
-						<input id="t3-install-password-repeat" class="t3-install-form-input-text" type="password" name="installToolPassword_check" />
-					</li>
-					<li class="t3-install-hidden">
-						<input type="hidden" name="installToolPassword_md5" value="1" />
-						<input type="hidden" name="formToken" value="###FORMTOKEN###" />
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<button type="submit">###SUBMIT###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/BackendModule/Index.html b/typo3/sysext/install/Resources/Private/Templates/BackendModule/Index.html
new file mode 100644
index 000000000000..2995a4d0e749
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/BackendModule/Index.html
@@ -0,0 +1 @@
+dummy
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/BackendModule/ShowEnableInstallToolButton.html b/typo3/sysext/install/Resources/Private/Templates/BackendModule/ShowEnableInstallToolButton.html
new file mode 100644
index 000000000000..2527c2808934
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/BackendModule/ShowEnableInstallToolButton.html
@@ -0,0 +1,27 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="BackendModule" />
+
+<f:section name="Content">
+	<f:form action="enableInstallTool" method="post" id="t3-install-form-unlock">
+		<f:form.hidden name="installToolEnableToken" value="{installToolEnableToken}" />
+		<div id="container">
+			<div class="typo3-message message-warning">
+				<h2>
+					<f:translate
+						key="LLL:EXT:install/Resources/Private/Language/BackendModule.xlf:confirmUnlockInstallToolTitle"
+					/>
+				</h2>
+				<f:translate
+					key="LLL:EXT:install/Resources/Private/Language/BackendModule.xlf:confirmUnlockInstallToolMessage"
+				/>
+				<button value="enableInstallTool">
+					<f:translate
+						key="LLL:EXT:install/Resources/Private/Language/BackendModule.xlf:confirmUnlockInstallToolButton"
+					/>
+					<span class="t3-install-form-button-icon-positive">&nbsp;</span>
+				</button>
+			</div>
+		</div>
+	</f:form>
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/CheckImageMagick.html b/typo3/sysext/install/Resources/Private/Templates/CheckImageMagick.html
deleted file mode 100644
index 4dcc05cb629d..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/CheckImageMagick.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Check ImageMagick</title>
-	</head>
-	<body>
-		<!-- ###VERSIONS### begin -->
-		<table id="t3-install-imagemagickversions" cellpadding="0" cellspacing="0">
-			<!-- ###ROWS### begin -->
-			<tr>
-				<td>###FILE###</td>
-				<td>###TYPE###</td>
-				<td>###VERSION###</td>
-			</tr>
-			<!-- ###ROWS### end -->
-		</table>
-		<!-- ###VERSIONS### end -->
-		
-		<!-- ###FORM### begin -->
-		<form id="t3-install-checkimagemagick" action="###ACTIONURL###" method="post">
-			<fieldset>
-				<ol>
-					<li class="t3-install-form-label-after">
-						<input id="t3-install-checkimlzw" type="checkbox" name="TYPO3_INSTALL[checkIM][lzw]" value="1" ###LZWCHECKED### />
-						<label for="t3-install-checkimlzw" class="t3-install-strong">###LZWLABEL###</label>
-					</li>
-					<li>
-						<label for="t3-install-checkimpath" class="t3-install-strong">###CHECKPATH###</label>
-						<input id="t3-install-checkimpath" type="text" name="TYPO3_INSTALL[checkIM][path]" value="###IMAGEMAGICKPATH###" class="t3-install-form-input-text" />
-					</li>
-					<li>
-						###COMMENT###
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<button type="submit">###SEND###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###FORM### begin -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/CheckMail.html b/typo3/sysext/install/Resources/Private/Templates/CheckMail.html
deleted file mode 100644
index a453c0a6858c..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/CheckMail.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Check Mail</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<!-- ###MAILSENT### begin -->
-		<h4 class="typo3-message message-information">###MESSAGE###</h4>
-		<!-- ###MAILSENT### end -->
-		<form action="###ACTIONURL###" method="post">
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-checkmail" class="t3-install-strong">###ENTEREMAIL###</label>
-						<input id="t3-install-checkmail" type="text" name="TYPO3_INSTALL[check_mail]" class="t3-install-form-input-text" />
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<button type="submit">###SUBMIT###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###TEMPLATE### begin -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseAdminUser.html b/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseAdminUser.html
deleted file mode 100644
index f0d24fe43ff0..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseAdminUser.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Check the database admin user</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<fieldset class="t3-install-form-label-width-21">
-			<ol>
-				<li>
-					<label for="t3-install-form-username">###USERNAME###</label>
-					<input id="t3-install-form-username" type="text" name="TYPO3_INSTALL[database_adminUser][username]" />
-				</li>
-			</ol>
-		</fieldset>
-		<fieldset class="t3-install-form-label-width-21">
-			<ol>
-				<li>
-					<label for="t3-install-form-password">###PASSWORD###</label>
-					<input id="t3-install-form-password" type="password" name="TYPO3_INSTALL[database_adminUser][password]" />
-				</li>
-				<li>
-					<label for="t3-install-form-passwordrepeat">###REPEATPASSWORD###</label>
-					<input id="t3-install-form-passwordrepeat" type="password" name="TYPO3_INSTALL[database_adminUser][password2]" />
-				</li>
-			</ol>
-		</fieldset>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseCache.html b/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseCache.html
deleted file mode 100644
index 815d0db07efe..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseCache.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Check the database cache</title>
-	</head>
-	<body>
-		<!-- ###EMPTIEDTABLES### begin -->
-		<ul>
-			<!-- ###TABLE### begin -->
-			<li>
-				###TABLENAME###
-			</li>
-			<!-- ###TABLE### end -->
-		</ul>
-		<!-- ###EMPTIEDTABLES### end -->
-		
-		<!-- ###TABLELIST### begin -->
-		<fieldset id="t3-install-checkthedatabasecache">
-			<ol>
-				<!-- ###SINGLETABLE### begin -->
-				<li class="t3-install-form-label-after">
-				<input id="t3-install-database_clearcache###TABLE###" name="TYPO3_INSTALL[database_clearcache][###TABLE###]" value="1" type="checkbox" ###CHECKED### />
-				<label for="t3-install-database_clearcache###TABLE###">
-					<span class="t3-install-strong t3-install-column1">
-						###TABLE###
-					</span>
-					<span class="t3-install-column2">
-						###COUNT###
-					</span>
-					<span class="t3-install-column3">
-						###LABEL###
-					</span>
-				</label>
-				</li>
-				<!-- ###SINGLETABLE### end -->
-				<!-- ###GROUP### begin -->
-				<li>&nbsp;</li>
-				<!-- ###GROUP### end -->
-			</ol>
-		</fieldset>
-		<!-- ###TABLELIST### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseImport.html b/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseImport.html
deleted file mode 100644
index 4989b20110d3..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseImport.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Check the database Import</title>
-	</head>
-	<body>
-		<!-- ###IMPORT### begin -->
-		<!-- ###REGULARMODE### begin-->
-		<fieldset id="t3-install-checkthedatabaseimport">
-			<ol>
-				<!-- ###ROWS### begin -->
-				<li class="t3-install-form-label-after">
-					<input id="t3-install-database-import-###TABLE###" name="TYPO3_INSTALL[database_import][###TABLE###]" value="###DEFINITION###" type="checkbox" />
-					<label for="t3-install-database-import-###TABLE###">
-						<span class="t3-install-strong">
-							###TABLE###
-						</span>
-						<span>
-							###ROWLABEL### ###COUNT###
-						</span>
-						<span>
-							<!-- ###EXIST### begin -->
-							<img src="###BACKPATH###gfx/icon_warning.gif" alt="" height="16" width="18" />
-							###TABLEEXISTS###
-							<!-- ###EXIST### end -->
-						</span>
-					</label>
-				</li>
-				<!-- ###ROWS### end -->
-			</ol>
-		</fieldset>
-		<!-- ###REGULARMODE### end-->
-		<fieldset>
-			<ol>
-				<li class="t3-install-form-label-after">
-					<input id="t3-install-database-import-all" name="TYPO3_INSTALL[database_import_all]" value="1" type="checkbox" ###CHECKED### />
-					<label for="t3-install-database-import-all">
-						###LABEL###
-					</label>
-				</li>
-			</ol>
-		</fieldset>
-		<!-- ###IMPORT### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseMenu.html b/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseMenu.html
deleted file mode 100644
index 3b1e1210d4c1..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseMenu.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Check the database Menu</title>
-	</head>
-	<body>
-		<!-- ###MENU### begin -->
-		<table id="t3-install-databasemenu" cellpadding="2" cellspacing="2">
-			<tr>
-				<td>
-					###UPDATEREQUIREDTABLES###
-				</td>
-				<td ###NOTICECMPFILECURRENT###>
-					<a href="###ACTION###&amp;TYPO3_INSTALL[database_type]=cmpFile|CURRENT_TABLES#t3-install-bottom">
-						###COMPARE###
-					</a>
-				</td>
-				<td>
-					&nbsp;
-				</td>
-				<td>
-					&nbsp;
-				</td>
-			</tr>
-			<tr>
-				<td>
-					###DUMPSTATICDATA###
-				</td>
-				<td>
-					&nbsp;
-				</td>
-				<td ###NOTICEIMPORTCURRENT###>
-					<a href="###ACTION###&amp;TYPO3_INSTALL[database_type]=import|CURRENT_STATIC#t3-install-bottom">
-						###IMPORT###
-					</a>
-				</td>
-				<td>
-					&nbsp;
-				</td>
-			</tr>
-			<tr>
-				<td colspan="4">
-					&nbsp;
-				</td>
-			</tr>
-			<!-- ###EXTRASQL### begin -->
-			<tr>
-				<td>
-					###FILESHORTNAME### (###FILESIZE###)
-				</td>
-				<td ###NOTICECMPFILE###>
-					<a href="###ACTION###&amp;TYPO3_INSTALL[database_type]=cmpFile|###FILE####t3-install-bottom">
-						###COMPARE###
-					</a>
-				</td>
-				<td ###NOTICEIMPORT###>
-					<a href="###ACTION###&amp;TYPO3_INSTALL[database_type]=import|###FILE####t3-install-bottom">
-						###IMPORT######SPECS###
-					</a>
-				</td>
-				<td ###NOTICEVIEW###>
-					<a href="###ACTION###&amp;TYPO3_INSTALL[database_type]=view|###FILE####t3-install-bottom">
-						###VIEW######SPECS###
-					</a>
-				</td>
-			</tr>
-			<!-- ###EXTRASQL### end -->
-			<tr>
-				<td>
-					&nbsp;
-				</td>
-				<td colspan="3" ###NOTICECMPTCA###>
-					<a href="###ACTION###&amp;TYPO3_INSTALL[database_type]=cmpTCA|#t3-install-bottom">
-						###COMPAREWITHTCA###
-					</a>
-				</td>
-			</tr>
-			<tr>
-				<td>
-					&nbsp;
-				</td>
-				<td colspan="3" ###NOTICEADMINUSER###>
-					<a href="###ACTION###&amp;TYPO3_INSTALL[database_type]=adminUser|#t3-install-bottom">
-						###CREATEADMINUSER###
-					</a>
-				</td>
-			</tr>
-			<tr>
-				<td>
-					&nbsp;
-				</td>
-				<td colspan="3" ###NOTICEUC###>
-					<a href="###ACTION###&amp;TYPO3_INSTALL[database_type]=UC|#t3-install-bottom">
-						###RESETUSERPREFERENCES###
-					</a>
-				</td>
-			</tr>
-			<tr>
-				<td>
-					&nbsp;
-				</td>
-				<td colspan="3" ###NOTICECACHE###>
-					<a href="###ACTION###&amp;TYPO3_INSTALL[database_type]=cache|#t3-install-bottom">
-						###CLEARTABLES###
-					</a>
-				</td>
-			</tr>
-		</table>
-		<a id="t3-install-bottom"></a>
-		<!-- ###MENU### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseUc.html b/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseUc.html
deleted file mode 100644
index 91c985190162..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/CheckTheDatabaseUc.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Check the database UC</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<fieldset class="t3-install-form-label-after">
-			<ol>
-				<li>
-					<input id="t3-install-databaseuc" type="checkbox" name="TYPO3_INSTALL[database_UC]" value="1" checked="checked" />
-					<label for="t3-install-databaseuc">###CLEARBEUSERS###</label>
-				</li>
-			</ol>
-		</fieldset>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/CleanUpManager.html b/typo3/sysext/install/Resources/Private/Templates/CleanUpManager.html
deleted file mode 100644
index e57f72ca5856..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/CleanUpManager.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Clean up manager</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<dl id="t3-install-cleanupmanagernumbers">
-			<dt>
-				###NUMBERCACHED###
-			</dt>
-			<dd>
-				###NUMBER###
-			</dd>
-		</dl>
-		<form method="post" action="###ACTION###">
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-cleanuptype">###CLEANUP###</label>
-						<select id="t3-install-cleanuptype" name="TYPO3_INSTALL[cleanup_type]">
-							<!-- ###CLEANUPOPTIONS### begin -->
-							<option value="###VALUE###">###DATA###</option>
-							<!-- ###CLEANUPOPTIONS### begin -->
-						</select>
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<button type="submit">###EXECUTE###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/DisplayFieldComp.html b/typo3/sysext/install/Resources/Private/Templates/DisplayFieldComp.html
deleted file mode 100644
index 624e75a3ef71..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/DisplayFieldComp.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Display fields compare</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<table cellpadding="0" cellspacing="0" class="t3-install-displayfieldscompare">
-			<thead>
-				<tr>
-					<th>
-						###HEADERFIELDNAME###
-					</th>
-					<th>
-						###HEADERSUGGESTED###
-					</th>
-					<th>
-						###HEADERACTUAL###
-					</th>
-				</tr>
-			</thead>
-			<tbody>
-				<!-- ###ROWS### begin -->
-				<tr>
-					<td>
-						###FIELDNAME###
-					</td>
-					<td ###CLASS###>
-						###FIELDCONTENT###
-					</td>
-					<td ###CLASS###>
-						###FIELDCONTENTDB###
-					</td>
-				</tr>
-				<!-- ###ROWS### end -->
-			</tbody>
-		</table>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/DisplayFields.html b/typo3/sysext/install/Resources/Private/Templates/DisplayFields.html
deleted file mode 100644
index 23b06e8de9b6..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/DisplayFields.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Display fields</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<table cellpadding="0" cellspacing="0" class="t3-install-displayfields">
-			<thead>
-				<tr>
-					<th class="t3-install-column1">
-						###HEADERFIELDNAME###
-					</th>
-					<th>
-						###HEADERLABEL###
-					</th>
-				</tr>
-			</thead>
-			<tbody>
-			<!-- ###ROWS### begin -->
-			<tr>
-				<td class="t3-install-column1">
-					###FIELDNAME###
-				</td>
-				<td>
-					###FIELDCONTENT###
-				</td>
-			</tr>
-			<!-- ###ROWS### end -->
-			</tbody>
-		</table>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/DisplaySuggestions.html b/typo3/sysext/install/Resources/Private/Templates/DisplaySuggestions.html
deleted file mode 100644
index f7f4be697232..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/DisplaySuggestions.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Display suggestions</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<!-- ###ROWS### begin -->
-		<table cellpadding="0" cellspacing="0" class="t3-install-displaysuggestions">
-			<thead>
-				<tr>
-					<th class="t3-install-column1">
-						###HEADERFIELDNAME###
-					</th>
-					<th>
-						###HEADERLABEL###
-					</th>
-				</tr>
-			</thead>
-			<tfoot>
-				<tr>
-					<td colspan="2" class="tfootHeader">
-						###HEADERSUGGESTION###
-					</td>
-				</tr>
-				<tr>
-					<td colspan="2">
-						<!-- ###PRE### begin -->
-						###CODE###
-						<!-- ###PRE### end -->
-					</td>
-				</tr>
-			</tfoot>
-			<tbody>
-				<tr>
-					<td class="t3-install-column1">
-						###FIELDNAME###
-					</td>
-					<td>
-						###FIELDCONTENT###
-					</td>
-				</tr>
-			</tbody>
-		</table>
-		<!-- ###ROWS### end -->
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/DisplayTwinImage.html b/typo3/sysext/install/Resources/Private/Templates/DisplayTwinImage.html
deleted file mode 100644
index d4b2e288121c..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/DisplayTwinImage.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Display twin image</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<!-- ###IMAGE### begin -->
-		<table cellspacing="0" cellpadding="0" class="t3-install-displaytwinimageimages">
-			<tbody>
-				<tr>
-					<td>
-						<img width="###DESTWIDTH###" height="###DESTHEIGHT###" src="###DESTURL###" alt="Your server" />
-					</td>
-					<td>
-						<img width="###VERIFYWIDTH###" height="###VERIFYHEIGHT###" src="###VERIFYURL###" alt="Reference"/>
-					</td>
-				</tr>
-			</tbody>
-		</table>
-		<table cellspacing="0" cellpadding="0" class="t3-install-displaytwinimagereference">
-			<thead>
-				<tr>
-					<th>
-						###YOURSERVER###
-					</th>
-					<th>
-						###REFERENCE###
-					</th>
-				</tr>
-			</thead>
-			<tbody>
-				<tr>
-					<td>
-						###YOURSERVERINFORMATION###
-					</td>
-					<td>
-						###REFERENCEINFORMATION###
-					</td>
-				</tr>
-			</tbody>
-		</table>
-		<!-- ###DIFFERENTPIXELDIMENSIONS### begin -->
-		<p>###MESSAGE###</p>
-		<!-- ###DIFFERENTPIXELDIMENSIONS### end -->
-		<!-- ###NOTE### begin -->
-		<p>
-			<strong>
-				###MESSAGE###
-			</strong>
-			<br />
-			###LABEL###
-		</p>
-		<!-- ###NOTE### end -->
-		<!-- ###IMCOMMANDS### begin -->
-		<p>
-			###MESSAGE###
-		</p>
-		<form action="">
-			<fieldset>
-				<div class="t3-install-displaytwinimagetextarea">
-					<textarea cols="40" rows="###ROWS###">###COMMANDS###</textarea>
-				</div>
-			</fieldset>
-		</form>
-		<!-- ###IMCOMMANDS### end -->
-		<!-- ###IMAGE### end -->
-		<!-- ###NOIMAGE### begin -->
-		<p>
-			###MESSAGE###
-			<br />
-			###LABEL###
-		</p>
-		<!-- ###COMMANDSAVAILABLE### begin -->
-		<form action="">
-			<fieldset>
-				<div class="t3-install-displaytwinimagetextarea">
-					<textarea cols="40" rows="###ROWS###">###COMMANDS###</textarea>
-		</div>
-			</fieldset>
-		</form>
-		<!-- ###COMMANDSAVAILABLE### end -->
-		<!-- ###NOIMAGE### end -->
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/GenerateConfigForm.html b/typo3/sysext/install/Resources/Private/Templates/GenerateConfigForm.html
deleted file mode 100644
index 0a28b23a7733..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/GenerateConfigForm.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Generate config form</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<fieldset>
-			<ol>
-				<li class="t3-install-description">
-					###DESCRIPTION###
-				</li>
-				<!-- ###TEXTAREA### begin -->
-				<li class="t3-install-form-label-above">
-					<label for="###ID###" class="t3-install-strong" title="###VALUE###">###KEY### = ###LABEL###</label>
-					<textarea id="###ID###" rows="5" cols="60" name="###NAME###">###VALUE###</textarea>
-				</li>
-				<!-- ###TEXTAREA### end -->
-				<!-- ###BOOLEAN### begin -->
-				<li class="t3-install-form-label-after">
-					<input type="hidden" value="0" name="###NAME###" />
-					<input id="###ID###" type="checkbox" value="###VALUE###" ###CHECKED### name="###NAME###" />
-					<label for="###ID###" class="t3-install-strong">###KEY### = ###LABEL###</label>
-				</li>
-				<!-- ###BOOLEAN### end -->
-				<!-- ###TEXTLINE### begin -->
-				<li class="t3-install-form-label-above">
-					<label for="###ID###" class="t3-install-strong">###KEY### = ###LABEL###</label>
-					<input id="###ID###" type="text" value="###VALUE###" name="###NAME###" class="t3-install-form-input-text" />
-				</li>
-				<!-- ###TEXTLINE### end -->
-			</ol>
-		</fieldset>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/GenerateUpdateDatabaseFormCheckboxes.html b/typo3/sysext/install/Resources/Private/Templates/GenerateUpdateDatabaseFormCheckboxes.html
deleted file mode 100644
index f411f131477d..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/GenerateUpdateDatabaseFormCheckboxes.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Generate Update Database Form Checkboxes</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<fieldset id="###TABLEID###">
-			<legend>###LABEL###</legend>
-			<ol>
-				<!-- ###MULTIPLETABLES### begin -->
-				<li class="t3-install-form-label-after">
-					<input class="checkall" type="checkbox" id="###SELECTALLID###" ###CHECKED### />
-					<label for="###SELECTALLID###">###SELECTDESELECTALL###</label>
-				</li>
-				<!-- ###MULTIPLETABLES### end -->
-				<!-- ###ROWS### begin -->
-				<li class="t3-install-form-label-after">
-					<input type="checkbox" id="###CHECKBOXID###" name="###NAME###" value="1" ###CHECKED### />
-					<label for="###CHECKBOXID###">
-						<!-- ###ICONAVAILABLE### begin -->
-						<img src="###BACKPATH###gfx/icon_warning.gif" width="18" height="16" alt="" />
-						<strong>###ICONTEXT###</strong>
-						<!-- ###ICONAVAILABLE### begin -->
-						###STRING###
-						<!-- ###CURRENT### begin -->
-						<br />
-						###MESSAGE### <em>###VALUE###</em>
-						<!-- ###CURRENT### end -->
-					</label>
-					<!-- ###ERROR### begin -->
-					<p class="typo3-message message-error">###ERRORMESSAGE###</p>
-					<!-- ###ERROR### end -->
-				</li>
-				<!-- ###ROWS### end -->
-				<!-- ###WARNINGS### begin -->
-				<!-- ###WARNINGITEM### begin -->
-				<li>
-					###WARNING###
-				</li>
-				<!-- ###WARNINGITEM### end -->
-				<!-- ###WARNINGS### end -->
-			</ol>
-		</fieldset>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/GetUpdateDbFormWrap.html b/typo3/sysext/install/Resources/Private/Templates/GetUpdateDbFormWrap.html
deleted file mode 100644
index 4a3b9c5d5de0..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/GetUpdateDbFormWrap.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Generate update database form wrap</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<form action="###ACTION####t3-install-bottom" method="post">
-			<fieldset>
-				<ol>
-					<li class="t3-install-hidden">
-						<input type="hidden" name="TYPO3_INSTALL[database_type]" value="###ACTIONTYPE###" />
-					</li>
-				</ol>
-			</fieldset>
-			###CONTENT###
-			<fieldset>
-				<ol>
-					<li>
-						<button type="submit">
-							###LABEL###
-							<span class="t3-install-form-button-icon-positive">&nbsp;</span>
-						</button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/ImageMenu.html b/typo3/sysext/install/Resources/Private/Templates/ImageMenu.html
deleted file mode 100644
index 7733fdf297a6..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/ImageMenu.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Image menu</title>
-	</head>
-	<body>
-		<!-- ###MENU### begin -->
-		<ol>
-			<!-- ###MENUITEM### begin -->
-			<li class="###BACKGROUNDCOLOR###">
-				<a href="###URL###">
-					###ITEM###
-				</a>
-			</li>
-			<!-- ###MENUITEM### end -->
-		</ol>
-		<!-- ###MENU### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/InitExtConfig.html b/typo3/sysext/install/Resources/Private/Templates/InitExtConfig.html
deleted file mode 100644
index 0e66aa352725..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/InitExtConfig.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Init ext config</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<form action="###ACTION###" method="post">
-			###CONTENT###
-			<fieldset>
-				<ol>
-					<li>
-						<button type="submit">
-							###WRITE###
-							<span class="t3-install-form-button-icon-positive">&nbsp;</span>
-						</button>
-					</li>
-					<li>
-						<strong>###NOTICE### </strong>
-						###EXPLANATION###
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Install.html b/typo3/sysext/install/Resources/Private/Templates/Install.html
deleted file mode 100644
index 0e983fe5bbbd..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Install.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="###CHARSET###"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="###METACHARSET###" />
-		<link rel="shortcut icon" href="../gfx/favicon.ico" />
-		<title>###HEADTITLE###</title>
-		###JAVASCRIPT###
-		###STYLESHEETS###
-	</head>
-	<body>
-		<div id="t3-install-outer">
-			<h1>###TITLE###</h1>
-			<h2>###HEADTITLE###</h2>
-			<div id="t3-install-left">
-				<!-- ###MENU### begin -->
-				<div id="t3-install-menu-border-top">&nbsp;</div>
-				<ol id="t3-install-menu">
-					<!-- ###MENUITEM### begin -->
-					<li id="###ID###" ###CLASS###>
-						<a href="###URL###">
-							###ITEM###
-						</a>
-					</li>
-					<!-- ###MENUITEM### end -->
-				</ol>
-				<div id="t3-install-menu-bottom">&nbsp;</div>
-				<!-- ###MENU### end -->
-				<ol id="t3-install-links">
-					<li>
-						<a href="###BACKENDURL###">
-							###BACKEND###
-						</a>
-					</li>
-					<li>
-						<a href="###FRONTENDURL###">
-							###FRONTEND###
-						</a>
-					</li>
-				</ol>
-			</div>
-			<div id="t3-install-right">
-				<div id="t3-install-box-border-top">&nbsp;</div>
-				<div id="t3-install-box-body">
-					<!-- ###ERRORMESSAGES### begin -->
-					<div class="typo3-message message-error">
-						<h4>###LLERRORS###</h4>
-						<ul>
-							<!-- ###MESSAGES### begin -->
-							<li>
-								###MESSAGE###
-							</li>
-							<!-- ###MESSAGES### end -->
-						</ul>
-					</div>
-					<!-- ###ERRORMESSAGES### end -->
-					<!-- ###CONTENT### begin -->
-					<!-- ###CONTENT### end -->
-				</div>
-				<div id="t3-install-box-border-bottom">&nbsp;</div>
-			</div>
-			<div id="t3-install-copyright">
-				###COPYRIGHT###
-			</div>
-		</div>
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Install_123.html b/typo3/sysext/install/Resources/Private/Templates/Install_123.html
deleted file mode 100644
index 080aff75a9ff..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Install_123.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="###CHARSET###"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="###METACHARSET###" />
-		<link rel="shortcut icon" href="../gfx/favicon.ico" />
-		<title>###HEADTITLE###</title>
-		###JAVASCRIPT###
-		###STYLESHEETS###
-	</head>
-	<body>
-		<div id="t3-install-outer">
-			<h1>###TITLE###</h1>
-			<div id="t3-install-box-border-top">&nbsp;</div>
-			<h2>###HEADTITLE###</h2>
-			<div id="t3-install-box-body">
-				<!-- ###MENU### begin -->
-				<ol id="t3-install-menu">
-					<!-- ###MENUITEM### begin -->
-					<li ###CLASS###>
-						<a href="###URL###">
-							###ITEM###
-						</a>
-					</li>
-					<!-- ###MENUITEM### end -->
-				</ol>
-				<!-- ###MENU### end -->
-				<!-- ###CONTENT### begin -->
-				<!-- ###CONTENT### end -->
-				<!-- ###ERRORMESSAGES### begin -->
-				<br />
-					<div class="typo3-message message-error">
-						<h4>###LLERRORS###</h4>
-						<ul>
-							<!-- ###MESSAGES### begin -->
-								<li>###MESSAGE###</li>
-							<!-- ###MESSAGES### end -->
-						</ul>
-					</div>
-				<!-- ###ERRORMESSAGES### end -->
-			</div>
-			<div id="t3-install-box-border-bottom">&nbsp;</div>
-			<div id="t3-install-copyright">
-				###COPYRIGHT###
-			</div>
-		</div>
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Install_login.html b/typo3/sysext/install/Resources/Private/Templates/Install_login.html
deleted file mode 100644
index 89e212a31a44..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Install_login.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="###CHARSET###"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="###METACHARSET###" />
-		<link rel="shortcut icon" href="../gfx/favicon.ico" />
-		<title>###HEADTITLE###</title>
-		###JAVASCRIPT###
-		###STYLESHEETS###
-	</head>
-	<body>
-		<div id="t3-install-outer" class="t3-install-login">
-			<h1>###TITLE###</h1>
-			<!-- ###CONTENT### begin -->
-			<!-- ###CONTENT### end -->
-		</div>
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/LoginForm.html b/typo3/sysext/install/Resources/Private/Templates/LoginForm.html
deleted file mode 100644
index b1d95e8f97a5..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/LoginForm.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Login Form</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<div id="t3-install-box-border-top">&nbsp;</div>
-		<h2>###HEADTITLE###</h2>
-		<div id="t3-install-box-body">
-			<h3>###SITENAME###</h3>
-			<form action="index.php" method="post" id="t3-install-form-login">
-				<fieldset>
-					<ol>
-						<li class="t3-install-form-label-width-7">
-							<label for="t3-install-form-password">###ENTERPASSWORD###</label>
-							<input id="t3-install-form-password" type="password" name="password" class="t3-install-form-input-text" />
-						</li>
-						<li class="t3-install-hidden">
-							<input type="hidden" name="redirect_url" value="###REDIRECTURL###" />
-						</li>
-					</ol>
-				</fieldset>
-				<fieldset class="t3-install-form-submit">
-					<ol>
-						<li>
-							<button type="submit">
-								###LOGIN###
-								<span class="t3-install-form-button-icon-positive">&nbsp;</span>
-							</button>
-						</li>
-					</ol>
-				</fieldset>
-			</form>
-		</div>
-		<div id="t3-install-box-border-bottom">&nbsp;</div>
-		<!-- ###WRONGPASSWORD### begin -->
-		<p class="typo3-message message-error">
-			###PASSWORDMESSAGE###
-			<br />
-			###PASSWORD###
-		</p>
-		<!-- ###WRONGPASSWORD### end -->
-		<!-- ###SESSIONEXPIRED### begin -->
-		<p class="typo3-message message-error">
-			###MESSAGE###
-		</p>
-		<!-- ###SESSIONEXPIRED### end -->
-		###MESSAGE###
-		<script type="text/javascript">
-		<!--
-			$('t3-install-form-password').focus();
-		//-->
-		</script>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Notice.html b/typo3/sysext/install/Resources/Private/Templates/Notice.html
deleted file mode 100644
index 7f92fa9da7db..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Notice.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="###CHARSET###"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-		<title>###TITLE###</title>
-		<link rel="shortcut icon" href="../../../../../gfx/favicon.ico" />
-		###STYLESHEET###
-		###JAVASCRIPT###
-	</head>
-	<body>
-		<div id="container">
-			<h1>TYPO3</h1>
-			<div class="typo3-message message-warning">
-				<h2>###TITLE###</h2>
-				###CONTENT###
-			</div>
-		</div>
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/PhpInformation.html b/typo3/sysext/install/Resources/Private/Templates/PhpInformation.html
deleted file mode 100644
index ec32d0fbf0e4..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/PhpInformation.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: PHP information</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<p>
-			###EXPLANATION###
-		</p>
-		<form action="">
-			<fieldset>
-				<div id="t3-install-debuginformation">
-					<textarea cols="80" rows="10">###DEBUGINFO###</textarea>
-				</div>
-			</fieldset>
-		</form>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/PrintAll.html b/typo3/sysext/install/Resources/Private/Templates/PrintAll.html
deleted file mode 100644
index b95cede4006b..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/PrintAll.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Print All</title>
-	</head>
-	<body>
-		<div id="t3-install-outer">
-			<div id="t3-install-box-body>
-				<!-- ###TEMPLATE### begin -->
-				<!-- ###SECTIONS### begin -->
-				<h3>###HEADER###</h3>
-				###SECTIONCONTENT###
-				<!-- ###SECTIONS### end -->
-				<!-- ###TEMPLATE### end -->
-			</div>
-		</div>
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/PrintSection.html b/typo3/sysext/install/Resources/Private/Templates/PrintSection.html
deleted file mode 100644
index 40bf47662b9a..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/PrintSection.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Print Section</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<h4 class="typo3-message ###MESSAGETYPE###">###SHORTSTRING###</h4>
-		<!-- ###LONGSTRINGAVAILABLE### begin -->
-		###LONGSTRING###
-		<!-- ###LONGSTRINGAVAILABLE### end -->
-		<!--  ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/SetupGeneral.html b/typo3/sysext/install/Resources/Private/Templates/SetupGeneral.html
deleted file mode 100644
index 935122d4740d..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/SetupGeneral.html
+++ /dev/null
@@ -1,257 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Setup General</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<form action="###ACTIONURL###" method="post">
-			<!-- ###ALLMODES### begin -->
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-username">###LABELUSERNAME###</label>
-						<input id="t3-install-form-username" type="text" name="TYPO3_INSTALL[Database][typo_db_username]" value="###USERNAME###" class="t3-install-form-input-text" />
-					</li>
-					<!-- ###SQLSAFEMODEUSERSUBPART### begin -->
-					<li>
-						###LABELSQLSAFEMODEUSER###
-						<br />
-						<strong>
-							###SQLSAFEMODEUSER###
-						</strong>
-					</li>
-					<!-- ###SQLSAFEMODEUSERSUBPART### end -->
-					<li>
-						<label for="t3-install-form-password">###LABELPASSWORD###</label>
-						<input id="t3-install-form-password" type="password" name="TYPO3_INSTALL[Database][typo_db_password]" value="###PASSWORD###" class="t3-install-form-input-text" />
-					</li>
-					<li>
-						<label for="t3-install-form-host">###LABELHOST###</label>
-						<input id="t3-install-form-host" type="text" name="TYPO3_INSTALL[Database][typo_db_host]" value="###HOST###" class="t3-install-form-input-text" />
-					</li>
-				</ol>
-			</fieldset>
-			<!-- ###DATABASELIST### begin -->
-			<fieldset>
-				<ol>
-					<!-- ###DATABASEAVAILABLE### begin -->
-					<li>
-						<label for="t3-install-form-db">###LABELDATABASE###</label>
-						<select id="t3-install-form-db" name="TYPO3_INSTALL[Database][typo_db]">
-							<!-- ###DATABASEITEM### begin -->
-							<option value="###DATABASENAME###" ###DATABASESELECTED###>
-								###DATABASEVALUE###
-							</option>
-							<!-- ###DATABASEITEM### end -->
-						</select>
-					</li>
-					<li>
-						<label for="t3-install-form-createdatabase">###LABELCREATEDATABASE###</label>
-						<input id="t3-install-form-createdatabase" type="text" name="TYPO3_INSTALL[Database][NEW_DATABASE_NAME]" value="" class="t3-install-form-input-text" />
-					</li>
-					<!-- ###DATABASEAVAILABLE### end -->
-					<!-- ###DATABASENOTAVAILABLE### begin -->
-					<li>
-						<label>###LABELDATABASE###</label>
-						<strong>
-							###TYPO3DB###
-						</strong>
-						<br />
-						###LABELNODATABASE###
-						<input type="hidden" name="TYPO3_INSTALL[Database][typo_db]" value="###TYPO3DB###" />
-					</li>
-					<!-- ###DATABASENOTAVAILABLE### end -->
-				</ol>
-			</fieldset>
-			<!-- ###DATABASELIST### end -->
-			<!-- ###ALLMODES### end -->
-			<!-- ###REGULARMODE### begin -->
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-sitename">###LABELSITENAME###</label>
-						<input id="t3-install-form-sitename" type="text" name="TYPO3_INSTALL[LocalConfiguration][sitename]" value="###SITENAME###" class="t3-install-form-input-text" />
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-encryptionkey">###LABELENCRYPTIONKEY###</label>
-						<span>
-							<input id="t3-install-form-encryptionkey" type="text" name="TYPO3_INSTALL[LocalConfiguration][encryptionKey]" value="###ENCRYPTIONKEY###" class="t3-install-form-input-text" />
-							<br />
-							<button type="button" id="encryptionKey">###LABELGENERATERANDOMKEY###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-						</span>
-					</li>
-				</ol>
-			</fieldset>
-			<!--  ###DISABLEEXECFUNCTIONSUBPART### begin -->
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-disableexecfunction">###LABELDISABLEEXECFUNCTION###</label>
-						<span>
-							###STRONGDISABLEEXECFUNCTION###
-							<br />
-							###LABELCURRENTVALUEIS### ###DEFAULTDISABLEEXECFUNCTION###
-							<input id="t3-install-form-disableexecfunction" type="hidden" name="TYPO3_INSTALL[LocalConfiguration][disable_exec_function]" value="###DISABLEEXECFUNCTION###" />
-						</span>
-					</li>
-				</ol>
-			</fieldset>
-			<!--  ###DISABLEEXECFUNCTIONSUBPART### end -->
-			<!--  ###GDLIBSUBPART### begin -->
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-gdlib">###LABELGDLIB###</label>
-						<span>
-							###STRONGGDLIB###
-							<br />
-							###LABELCURRENTVALUEIS### ###DEFAULTGDLIB###
-							<input id="t3-install-form-gdlib" type="hidden" name="TYPO3_INSTALL[LocalConfiguration][gdlib]" value="###GDLIB###" />
-						</span>
-					</li>
-				</ol>
-			</fieldset>
-			<!--  ###GDLIBSUBPART### end -->
-			<!--  ###GDLIBPNGSUBPART### begin -->
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-gdlibpng">###LABELGDLIBPNG###</label>
-						<span>
-							###STRONGGDLIBPNG###
-							<br />
-							###LABELCURRENTVALUEIS### ###DEFAULTGDLIBPNG###
-							<br />
-							<select id="t3-install-form-gdlibpng" name="TYPO3_INSTALL[LocalConfiguration][gdlib_png]">
-								<!-- ###GDLIBPNGOPTION### -->
-								<option value="###VALUE###" ###SELECTED###>
-									###DATA###
-								</option>
-								<!-- ###GDLIBPNGOPTION### -->
-							</select>
-						</span>
-					</li>
-				</ol>
-			</fieldset>
-			<!--  ###GDLIBPNGSUBPART### end -->
-			<!--  ###IMAGEMAGICKSUBPART### begin -->
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-imagemagick">###LABELIMAGEMAGICK###</label>
-						<span>
-							###STRONGIMAGEMAGICK###
-							<br />
-							###LABELCURRENTVALUEIS### ###DEFAULTIMAGEMAGICK###
-							<input id="t3-install-form-imagemagick" type="hidden" name="TYPO3_INSTALL[LocalConfiguration][im]" value="###IMAGEMAGICK###" />
-						</span>
-					</li>
-				</ol>
-			</fieldset>
-			<!--  ###IMAGEMAGICKSUBPART### end -->
-			<!--  ###IMCOMBINEFILENAMESUBPART### begin -->
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-imcombinefilename">###LABELIMCOMBINEFILENAME###</label>
-						<span>
-							###STRONGIMCOMBINEFILENAME###
-							<br />
-							###LABELCURRENTVALUEIS### ###DEFAULTIMCOMBINEFILENAME###
-							<input id="t3-install-form-imcombinefilename" type="hidden" name="TYPO3_INSTALL[LocalConfiguration][im_combine_filename]" value="###IMCOMBINEFILENAME###" />
-						</span>
-					</li>
-				</ol>
-			</fieldset>
-			<!--  ###IMCOMBINEFILENAMESUBPART### end -->
-			<!--  ###IMVERSION5SUBPART### begin -->
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-imversion5">###LABELIMVERSION5###</label>
-						<span>
-							###STRONGIMVERSION5###
-							<br />
-							###LABELCURRENTVALUEIS### ###DEFAULTIMVERSION5###
-							<input id="t3-install-form-imversion5" type="hidden" name="TYPO3_INSTALL[LocalConfiguration][im_version_5]" value="###IMVERSION5###" />
-						</span>
-					</li>
-				</ol>
-			</fieldset>
-			<!--  ###IMVERSION5SUBPART### end -->
-			<!--  ###IMPATHSUBPART### begin -->
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-impath">###LABELIMPATH###</label>
-						<span>
-							###STRONGIMPATH###
-							<br />
-							###LABELCURRENTVALUEIS### ###DEFAULTIMPATH###
-							<input id="t3-install-form-impath" type="hidden" name="TYPO3_INSTALL[LocalConfiguration][im_path]" value="###IMPATH###" />
-						</span>
-					</li>
-				</ol>
-			</fieldset>
-			<!--  ###IMPATHSUBPART### end -->
-			<!--  ###IMPATHLZWSUBPART### begin -->
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-impathlzw">###LABELIMPATHLZW###</label>
-						<span>
-							###STRONGIMPATHLZW###
-							<br />
-							###LABELCURRENTVALUEIS### ###DEFAULTIMPATH###
-							<br />
-							<select id="t3-install-form-impathlzw" name="TYPO3_INSTALL[LocalConfiguration][im_path_lzw]">
-								<!-- ###IMPATHLZWOPTION### begin -->
-								<option value="###VALUE###" ###SELECTED###>
-									###DATA###
-								</option>
-								<!-- ###IMPATHLZWOPTION### end -->
-							</select>
-						</span>
-					</li>
-				</ol>
-			</fieldset>
-			<!--  ###IMPATHLZWSUBPART### end -->
-			<!--  ###TTFDPISUBPART### begin -->
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-form-ttfdpi">###LABELTTFDPI###</label>
-						<input id="t3-install-form-ttfdpi" type="text" name="TYPO3_INSTALL[LocalConfiguration][TTFdpi]" value="###TTFDPI###" class="t3-install-form-input-text" />
-					</li>
-				</ol>
-			</fieldset>
-			<!--  ###TTFDPISUBPART### end -->
-			<!-- ###REGULARMODE### end -->
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<button type="submit">
-							###LABELUPDATELOCALCONF###
-							<span class="t3-install-form-button-icon-positive">&nbsp;</span>
-						</button>
-					</li>
-					<li>
-						<strong>###LABELNOTICE###</strong>
-						###LABELCOMMENTUPDATELOCALCONF###
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###TEMPLATE### begin -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/StepHeader.html b/typo3/sysext/install/Resources/Private/Templates/StepHeader.html
deleted file mode 100644
index 92b6dbb6c83a..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/StepHeader.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Step Header</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<ol id="t3-install-123-stepheader" class="clearfix">
-			<!-- ###STEPITEM### begin -->
-			<li ###CLASS###>
-				<a href="###URL###">
-					###STEP###
-				</a>
-			</li>
-			<!-- ###STEPITEM### end -->
-		</ol>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/StepOutput.html b/typo3/sysext/install/Resources/Private/Templates/StepOutput.html
deleted file mode 100644
index b8745122580d..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/StepOutput.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Step Output</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		###STEPHEADER###
-		<h3>###HEADER###</h3>
-		###STEP###
-		<div id="t3-install-123-skip">
-			<a href="###SKIP123###">
-				###NOTICE###
-			</a>
-		</div>
-		<!-- ###TEMPLATE### end -->
-		
-		<!-- ###STEP1### begin -->
-		###LLINTRODUCTION###
-		<form method="post" action="###ACTION###">
-			<fieldset>
-				<ol>
-					<li class="t3-install-hidden">
-						<input type="hidden" value="###STEP###" name="step" />
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<button type="submit">###CONTINUE###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###STEP1### end -->
-		
-		<!-- ###STEP2### begin -->
-		<p>###LLDESCRIPTION###</p>
-		<form method="post" action="###ACTION###">
-			<fieldset class="t3-install-form-label-width-7">
-				<ol>
-					<li class="t3-install-hidden">
-						<input type="hidden" value="###STEP###" name="step" />
-						<input type="hidden" value="###ENCRYPTIONKEY###" name="TYPO3_INSTALL[LocalConfiguration][encryptionKey]" />
-						<input type="hidden" value="###BRANCH###" name="TYPO3_INSTALL[LocalConfiguration][compat_version]" />
-					</li>
-					<li>
-						<label for="t3-install-form-username">###LABELUSERNAME###</label>
-						<input id="t3-install-form-username" class="t3-install-form-input-text" type="text" value="###USERNAME###" name="TYPO3_INSTALL[Database][typo_db_username]" />
-					</li>
-					<li>
-						<label for="t3-install-form-password">###LABELPASSWORD###</label>
-						<input id="t3-install-form-password" class="t3-install-form-input-text" type="password" value="###PASSWORD###" name="TYPO3_INSTALL[Database][typo_db_password]" />
-					</li>
-					<li>
-						<label for="t3-install-form-host">###LABELHOST###</label>
-						<input id="t3-install-form-host" class="t3-install-form-input-text" type="text" value="###HOST###" name="TYPO3_INSTALL[Database][typo_db_host]" />
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<button type="submit">###CONTINUE###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###STEP2### end -->
-		
-		<!-- ###STEP3### begin -->
-		<p>###LLOPTIONS###</p>
-		<form id="t3-install-123-step3" method="post" action="###ACTION###">
-			<fieldset>
-				<ul>
-					<li class="t3-install-hidden">
-						<input type="hidden" value="###STEP###" name="step" />
-					</li>
-					<li>
-						<input type="radio" name="TYPO3_INSTALL[db_select_option]" id="t3-install-form-db-select-new" value="NEW" ###FORMFIELDATTRIBUTESNEW### class="radio" />
-						<div>
-							<label for="t3-install-123-newdatabase">###LLOPTION1###</label>
-							<p>###LLREMARK1###</p>
-							<input id="t3-install-123-newdatabase" class="t3-install-form-input-text" type="text" name="TYPO3_INSTALL[Database][NEW_DATABASE_NAME]" ###FORMFIELDATTRIBUTESNEW### onfocus="document.getElementById('t3-install-form-db-select-new').checked=true" />
-							<!-- ###DATABASE_NAME_PATTERNS### begin -->
-							<p>###LL_DB_PATTERN_REMARK### <ul style="list-style:disc;">###LL_DB_PATTERN_LIST###</ul></p>
-							<!-- ###DATABASE_NAME_PATTERNS### end -->
-						</div>
-					</li>
-					<li>
-						<input type="radio" name="TYPO3_INSTALL[db_select_option]" id="t3-install-form-db-select-existing" value="EXISTING" ###FORMFIELDATTRIBUTESSELECT### class="radio" />
-						<div>
-							<label for="t3-install-123-database">###LLOPTION2###</label>
-							<p>###LLREMARK2###</p>
-							<select id="t3-install-123-database" name="TYPO3_INSTALL[Database][typo_db]" onfocus="document.getElementById('t3-install-form-db-select-existing').checked=true">
-								<option value="">Select database</option>
-								<!-- ###DATABASEOPTIONS### begin -->
-								<option value="###DATABASEVALUE###" ###DATABASESELECTED###>###DATABASENAME###</option>
-								<!-- ###DATABASEOPTIONS### end -->
-							</select>
-						</div>
-					</li>
-				</ul>
-			</fieldset>
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<button type="submit">###CONTINUE###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###STEP3### end -->
-		
-		<!-- ###STEP4### begin -->
-		<h4>###LLSUMMARY###</h4>
-		<dl id="t3-install-123-stepoutputsummary" class="clearfix">
-			<dt>###LLUSERNAME###</dt>
-			<dd>###USERNAME###</dd>
-			<dt>###LLHOST###</dt>
-			<dd>###HOST###</dd>
-			<dt>###LLDATABASE###</dt>
-			<dd>###DATABASE###</dd>
-			<dt>###LLNUMBERTABLES###</dt>
-			<dd>###NUMBERTABLES###</dd>
-		</dl>
-		<form action="###ACTION####t3-install-bottom" method="post">
-			<fieldset>
-				<ol>
-					<li class="t3-install-hidden">
-						<input type="hidden" name="TYPO3_INSTALL[database_type]" value="import" />
-						<input type="hidden" name="TYPO3_INSTALL[database_import_all]" value="1" />
-						<input type="hidden" name="step" value="" />
-						<input type="hidden" name="goto_step" value="go" />
-					</li>
-					<li>
-						<label for="t3-install-123-databasetype">###LLDATABASETYPE###</label>
-						<select id="t3-install-123-databasetype" name="TYPO3_INSTALL[database_type]">
-							<!-- ###DATABASETYPEOPTIONS### begin -->
-							<option value="###DATABASETYPEVALUE###">###DATABASENAME###</option>
-							<!-- ###DATABASETYPEOPTIONS### end -->
-						</select>
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset>
-				<ol>
-					<li>
-						<button type="submit">
-							###LABEL###
-							<span class="t3-install-form-button-icon-positive">&nbsp;</span>
-						</button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###STEP4### end -->
-
-		<!-- ###STEPGO### begin -->
-		###MESSAGEBASICFINISHED###
-		<h4 class="typo3-message message-warning">###LLIMPORTANT###</h4>
-		###SECURITYRISK###
-		###LLSWITCHMODE###
-		<!-- ###STEPGO### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Typo3ConfEdit.html b/typo3/sysext/install/Resources/Private/Templates/Typo3ConfEdit.html
deleted file mode 100644
index fc8b2dc743bd..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Typo3ConfEdit.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: TYPO3 Conf Edit</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<dl id="t3-install-confeditfilelist">
-			<!-- ###FILES### begin -->
-			<dt ###CLASS###>
-				<a href="###EDITURL###">
-					###FILENAME###
-				</a>
-			</dt>
-			<dd>
-				###FILESIZE### 
-			</dd>
-			<!-- ###FILES### end -->
-		</dl>
-		<p>
-			###EDITPATH###
-		</p>
-		<!-- ###ALLOWFILEEDITOUTSIDETYPO3CONFDIR### begin -->
-		<form action="###ACTION###" method="post">
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-editpath">###PATHSITE###</label>
-						<input id="t3-install-editpath" type="text" name="TYPO3_INSTALL[FILE][EDIT_path]" value="###EDITPATH###" class="t3-install-form-input-text" />
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<button type="submit">###SET###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###ALLOWFILEEDITOUTSIDETYPO3CONFDIR### end -->
-		<p>
-			<a href="###DELETETEMPCACHEDURL###">
-				###DELETETEMPCACHED###
-			</a>
-		</p>
-		<!--  ###FILEEDIT### begin -->
-		<h4 class="typo3-message message-information">
-			###LLEDITING### ###FILE###
-		</h4>
-		###MESSAGES###
-		<p>
-			###MD5SUM###
-		</p>
-		<form id="t3-install-fileedit" action="###ACTION###" method="post">
-			<fieldset>
-				<ol>
-					<li class="t3-install-hidden">
-						<input type="hidden" name="TYPO3_INSTALL[FILE][name]" value="###FILENAME###" />
-						<!-- ###ALLOWFILEEDITOUTSIDETYPO3CONFDIR### begin -->
-						<input type="hidden" name="TYPO3_INSTALL[FILE][EDIT_path]" value="###FILEEDITPATH###" />
-						<!-- ###ALLOWFILEEDITOUTSIDETYPO3CONFDIR### end -->
-						<input type="hidden" name="TYPO3_INSTALL[FILE][prevMD5]" value="###FILEPREVIOUSMD5###" />
-					</li>
-					<li>
-						<textarea cols="48" rows="30" name="TYPO3_INSTALL[FILE][###FILEMD5###]" wrap="off">###FILECONTENT###</textarea>
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset>
-				<ol>
-					<li class="t3-install-form-label-after">
-						<input id="t3-install-wintounixbr" type="checkbox" name="TYPO3_INSTALL[FILE][win_to_unix_br]" value="1" ###WINTOUNIXBRCHECKED### />
-						<label for="t3-install-wintounixbr">###WINTOUNIXBR###</label>
-					</li>
-					<li class="t3-install-form-label-after">
-						<input id="t3-install-backup" type="checkbox" name="TYPO3_INSTALL[FILE][backup]" value="1" ###BACKUPCHECKED### />
-						<label for="t3-install-backup">###BACKUP###</label>
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<!-- ###SHOWSAVEBUTTON### begin -->
-						<button type="submit" name="TYPO3_INSTALL[SAVE_FILE]" value="###SAVEFILE###">###SAVEFILE###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-						<!-- ###SHOWSAVEBUTTON### end -->
-						<button type="submit" name="_close" value="###CLOSE###">###CLOSE###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!--  ###FILEEDIT### end -->
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/Typo3TempManager.html b/typo3/sysext/install/Resources/Private/Templates/Typo3TempManager.html
deleted file mode 100644
index 829234058076..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Typo3TempManager.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: TYPO3 Temp Manager</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<dl id="t3-install-tempmanagernumbers">
-			<dt>
-				###NUMBERTEMPORARY###
-			</dt>
-			<dd>
-				###TEMPORARY###
-			</dd>
-			<dt>
-				###NUMBERMATCHING###
-			</dt>
-			<dd>
-				###MATCHING### ###DELETETYPE###
-			</dd>
-			<dt>
-				###NUMBERDELETED###
-			</dt>
-			<dd>
-				###DELETED###
-			</dd>
-		</dl>
-		<form method="post" action="index.php?TYPO3_INSTALL[type]=cleanup#t3-install-tempmanagernumbers">
-			<fieldset>
-				<ol>
-					<li>
-						<label for="t3-install-delete">###DELETECONDITION###</label>
-						<select id="t3-install-delete" name="TYPO3_INSTALL[typo3temp_delete]">
-							<!-- ###DELETEOPTIONS### begin -->
-							<option value="###VALUE###" ###SELECTED###>###DATA###</option>
-							<!-- ###DELETEOPTIONS### end -->
-						</select>
-					</li>
-					<li>
-						<label for="t3-install-action">###NUMBERFILES###</label>
-						<select id="t3-install-action" name="TYPO3_INSTALL[typo3temp_action]">
-							<!-- ###ACTIONOPTIONS### begin -->
-							<option value="###VALUE###">###DATA###</option>
-							<!-- ###ACTIONOPTIONS### end -->
-						</select>
-					</li>
-					<li>
-						<label for="t3-install-subdirectory">###FROMSUBDIRECTORY###</label>
-						<select id="t3-install-subdirectory" name="TYPO3_INSTALL[typo3temp_subdir]">
-							<!-- ###SUBDIRECTORYOPTIONS### begin -->
-							<option value="###VALUE###" ###SELECTED###>###DATA###</option>
-							<!-- ###SUBDIRECTORYOPTIONS### end -->
-						</select>
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<button type="submit">###EXECUTE###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		###EXPLANATION###
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/UpdateWizardParts.html b/typo3/sysext/install/Resources/Private/Templates/UpdateWizardParts.html
deleted file mode 100644
index 7358a543276c..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/UpdateWizardParts.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Update wizard parts</title>
-	</head>
-	<body>
-		<!-- ###CHECKFORUPDATE### begin -->
-		<p>If you upgrade your TYPO3 installation from one major version to another (e.g. 4.5 to 4.6), then the Upgrade Wizards guide you through the necessary steps to upgrade your database records or explicitly install extensions that ship with the latest TYPO3 version.</p>
-		<hr />
-		<!-- ###UPDATESAVAILABLE### begin -->
-		<!-- ###UPDATEWIZARDBOXES### begin -->
-		<form action="###ACTION####t3-install-bottom" method="post">
-			<fieldset class="t3-install-hidden">
-				<ol>
-					<li>
-						<input type="hidden" name="TYPO3_INSTALL[database_type]" value="getUserInput" />
-					</li>
-				</ol>
-			</fieldset>
-			<!-- ###SINGLEUPDATEWIZARDBOX### begin -->
-			<h4>###TITLE###</h4>
-			###EXPLANATION###
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						###NEXT###
-					</li>
-				</ol>
-			</fieldset>
-			<hr />
-			<!-- ###SINGLEUPDATEWIZARDBOX### end -->
-		</form>
-		<!-- ###UPDATEWIZARDBOXES### end -->
-		<h4>###FINALSTEP###</h4>
-		###FINALSTEPEXPLANATION###
-		<a href="index.php?TYPO3_INSTALL[type]=database&amp;TYPO3_INSTALL[database_type]=cmpFile|CURRENT_TABLES#t3-install-bottom">###COMPAREDATABASE###<span class="t3-install-form-button-icon-positive">&nbsp;</span></a>
-		<!-- ###UPDATESAVAILABLE### end -->
-		<!-- ###CHECKFORUPDATE### end -->
-		
-		<!-- ###GETUSERINPUT### begin -->
-		<form action="###ACTION####t3-install-bottom" method="post">
-			<fieldset class="t3-install-hidden">
-				<ol>
-					<li>
-						<input type="hidden" value="performUpdate" name="TYPO3_INSTALL[database_type]" />
-					</li>
-				</ol>
-			</fieldset>
-			<p>
-				<strong>
-					###INTRODUCTION###
-				</strong>
-			</p>
-			<!-- ###NOUPDATESAVAILABLE### begin -->
-			<p>
-				<strong>
-					###NOUPDATES###
-				</strong>
-			</p>
-			<!-- ###NOUPDATESAVAILABLE### end -->
-			<!-- ###UPDATESAVAILABLE### begin -->
-			<fieldset>
-				<ol>
-					<li class="t3-install-hidden">
-						<input type="hidden" name="TYPO3_INSTALL[update][extList][]" value="###IDENTIFIER###" />
-					</li>
-				</ol>
-			</fieldset>
-			<h4>###TITLE###</h4>
-			###IDENTIFIERMETHOD###
-			<!-- ###UPDATESAVAILABLE### end -->
-			<fieldset>
-				<ol>
-					<li class="t3-install-form-label-after">
-						<input id="t3-install-showdatabasequeries" type="checkbox" name="TYPO3_INSTALL[update][showDatabaseQueries]" value="1" />
-						<label for="t3-install-showdatabasequeries">###SHOWDATABASEQUERIES###</label>
-					</li>
-				</ol>
-			</fieldset>
-			<fieldset class="t3-install-form-submit">
-				<ol>
-					<li>
-						<button type="submit">
-							###PERFORMUPDATES###
-							<span class="t3-install-form-button-icon-positive">&nbsp;</span>
-						</button>
-					</li>
-				</ol>
-			</fieldset>
-		</form>
-		<!-- ###GETUSERINPUT### end -->
-		
-		<!-- ###PERFORMUPDATE### begin -->
-			<!-- ###UPDATEITEMS### begin -->
-			<p class="innerWidth">
-				<strong>
-					###TITLE###
-				</strong>
-			</p>
-				<!-- ###CHECKUSERINPUT### begin -->
-				###CUSTOMOUTPUT###
-				<br />
-				<br />
-				<a href="javascript:history.back()">
-					###GOBACK###
-				</a>
-				<!-- ###CHECKUSERINPUT### end -->
-				<!-- ###UPDATEPERFORMED### begin -->
-				<strong>
-					###UPDATESTATUS###
-				</strong>
-				<!-- ###DATABASEQUERIES### begin -->
-				<br />
-				###QUERY###
-				<!-- ###DATABASEQUERIES### end -->
-				
-				<!-- ###CUSTOMOUTPUT### begin -->
-				<br />
-				###CUSTOM###
-				<!-- ###CUSTOMOUTPUT### end -->
-				
-				<!-- ###UPDATEPERFORMED### end -->
-				<!-- ###NOPERFORMUPDATE### begin -->
-				<strong>
-					###NOUPDATEMETHOD###
-				</strong>
-				<!-- ###NOPERFORMUPDATE### end -->
-			<!-- ###UPDATEITEMS### end -->
-			<!-- ###NEXTUPDATEWIZARD### begin -->
-			<br /><br /><br /><hr />
-			<form action="index.php?TYPO3_INSTALL[type]=update" method="post">
-				<fieldset class="t3-install-hidden">
-					<ol>
-						<li>
-							<input name="TYPO3_INSTALL[database_type]" value="getUserInput" type="hidden">
-						</li>
-					</ol>
-				</fieldset>
-				<fieldset class="t3-install-form-submit">
-					<ol>
-						<li>
-							<button type="submit" name="TYPO3_INSTALL[update][###NEXTIDENTIFIER###]">
-								Go to the next update wizard.
-							</button>
-						</li>
-					</ol>
-				</fieldset>
-			</form>
-			<!-- ###NEXTUPDATEWIZARD### end -->
-		<!-- ###PERFORMUPDATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/ViewArray.html b/typo3/sysext/install/Resources/Private/Templates/ViewArray.html
deleted file mode 100644
index cc26f7918b33..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/ViewArray.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: View Array</title>
-	</head>
-	<body>
-		<!-- ###TEMPLATE### begin -->
-		<dl class="t3-install-viewarray">
-			<!-- ###ITEM### begin -->
-			<dt>
-				###KEY###
-			</dt>
-			<dd>
-				###DESCRIPTION###
-			</dd>
-			<!-- ###ITEM### end -->
-		</dl>
-		<!-- ###TEMPLATE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Templates/WriteToLocalConfControl.html b/typo3/sysext/install/Resources/Private/Templates/WriteToLocalConfControl.html
deleted file mode 100644
index f2bf4010bc72..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/WriteToLocalConfControl.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-	<head>
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Template: Write to localconf control</title>
-	</head>
-	<body>
-		<!-- ###CONTINUE### begin -->
-		<h3>About configuration:</h3>
-		<h4 class="typo3-message message-ok">###HEADER###</h4>
-		<ul>
-			<!-- ###MESSAGES### begin -->
-			<li>
-				###MESSAGE###
-			</li>
-			<!-- ###MESSAGES### end -->
-		</ul>
-		<p>
-			<a href="###ACTION###">
-				###LABEL###
-			</a>
-		</p>
-		<!-- ###CONTINUE### end -->
-		<!-- ###NOCHANGE### begin -->
-		<h3>About configuration:</h3>
-		<h4 class="typo3-message message-warning">###HEADER###</h4>
-		<p>###MESSAGE###</p>
-		<p>
-			<a href="###ACTION###">
-				###LABEL###
-			</a>
-		</p>
-		<!-- ###NOCHANGE### end -->
-	</body>
-</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Public/Images/body-background.jpg b/typo3/sysext/install/Resources/Public/Images/Background/Body.jpg
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/body-background.jpg
rename to typo3/sysext/install/Resources/Public/Images/Background/Body.jpg
diff --git a/typo3/sysext/install/Resources/Public/Images/button-background.jpg b/typo3/sysext/install/Resources/Public/Images/Background/Button.jpg
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/button-background.jpg
rename to typo3/sysext/install/Resources/Public/Images/Background/Button.jpg
diff --git a/typo3/sysext/install/Resources/Public/Images/button-background-hover.jpg b/typo3/sysext/install/Resources/Public/Images/Background/ButtonHover.jpg
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/button-background-hover.jpg
rename to typo3/sysext/install/Resources/Public/Images/Background/ButtonHover.jpg
diff --git a/typo3/sysext/install/Resources/Public/Images/content-background.jpg b/typo3/sysext/install/Resources/Public/Images/Background/Content.jpg
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/content-background.jpg
rename to typo3/sysext/install/Resources/Public/Images/Background/Content.jpg
diff --git a/typo3/sysext/install/Resources/Public/Images/content-bottom.png b/typo3/sysext/install/Resources/Public/Images/Background/ContentBottom.png
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/content-bottom.png
rename to typo3/sysext/install/Resources/Public/Images/Background/ContentBottom.png
diff --git a/typo3/sysext/install/Resources/Public/Images/content-top.png b/typo3/sysext/install/Resources/Public/Images/Background/ContentTop.png
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/content-top.png
rename to typo3/sysext/install/Resources/Public/Images/Background/ContentTop.png
diff --git a/typo3/sysext/install/Resources/Public/Images/logo.gif b/typo3/sysext/install/Resources/Public/Images/Background/Logo.gif
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/logo.gif
rename to typo3/sysext/install/Resources/Public/Images/Background/Logo.gif
diff --git a/typo3/sysext/install/Resources/Public/Images/menuBackground.gif b/typo3/sysext/install/Resources/Public/Images/Background/Menu.gif
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/menuBackground.gif
rename to typo3/sysext/install/Resources/Public/Images/Background/Menu.gif
diff --git a/typo3/sysext/install/mod/install.gif b/typo3/sysext/install/Resources/Public/Images/Icon/BackendModule.gif
similarity index 58%
rename from typo3/sysext/install/mod/install.gif
rename to typo3/sysext/install/Resources/Public/Images/Icon/BackendModule.gif
index 5458ec9ccc46cecc037c0418f113ee6592127a6e..eb043bb3d37c2c50063d40cfde94a60150f8a933 100644
GIT binary patch
delta 113
zcmcc3a+8I}-P6s&GEsm*fZ-X#MxGW%K}H4!KL#BJAOHzEuy32ZkkN_JbMg~LGy4My
z-&Mt$xGgJ89v)<tXjK!b*kPg6(J(>H#Ky#tapB4KF6Ax`qXjAsLaGYRT8s;xG%Vy`
PaPjF*Sh4i91A{dHq52^t

delta 115
zcmcb~a+`(6-P6s&GEsm*fZ?0pMxGW%K~@F^KL#BJAOHzEu<w|>kkN^eaq<&JGe<^7
zh3~3jP25EvG7dGf8*uq*d?+Y%5nxpG&8Wy|Vse_yFXk>HnBw5spyK7!6~g3jlF?a^
Rp<{;F!3n3QH!?6-0|1<7ADRFF

diff --git a/typo3/sysext/install/Resources/Public/Images/Icon/Error.png b/typo3/sysext/install/Resources/Public/Images/Icon/Error.png
new file mode 100644
index 0000000000000000000000000000000000000000..84898d94b8cfbfe9d95037f1ddaa767ef1fd8533
GIT binary patch
literal 671
zcmV;Q0$}}#P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0007JNkl<Zc-p0t
z`%6<{7{~itG)%h?5<&Qb=9FP}F?P&L+hG@-+iH1XWKy2Fo8*c_7h)2jW)6j*zzQlg
zk&uWm$|CAyr0Z;LZt6T|^UQ*8=N#;eNc_bIzQ4S@pYNCFdER#yfF0?-gWv7vGB-RH
zD&;cK>kcEEu-C9`tDcTu)>12%$jogG1dvF%%)w=MJvhG){G$O$tiKy!%8Vsjbuipi
zL2PM|a+?X>S;xhDJ@_>-3V!GslHT)@_`6<gjE^AdYr_w#id(dl5&szQPE$s*&B(0w
zx+OT_s*&`!Si2r<s}8BBenf6u!MEB{hBlOB$Ob~6_NddEhMfj*4ufnU^pDjREmoRI
z@Q;Tv-$>#US!9<DgbTFTCqLLBf^y<!N#L?ggJ`1~@tZD0Z+Y>)Dxa1OV$JF#|6~xH
z$0UMs;$}(UQvF#(tknoNXb~T|jaecuDI0{FDwFGD16XqyMNm%M_&g`_68O_ng^;Nd
zAuEaaa35Zm9ZnlC7gY3We<!#;j|j?%@jG2$ANVCOXsiHZID;iGg-~}pW=eC@Ei9N%
z*}vO#SRcD5f^y<!Nnk)<jzukjwb6dO)1St)@<4isUu%wKe9<YHU`GoQ4~OK$n9nQh
zzC!{RNR<T7Qw^9Z-p5QTa^y8i`lwM5bJYc0z;hAY{Xs;p3y;R6L7+~J$W=-hoB+2r
z;6+gmH&M8U*zzgAEzcv~sE!0b)T$8b66P_`gIIqLm`*ol$rG3;%nm*;$Rf7=Os`HJ
z%A7f#OT8>PNKY&Gvs1-;*-1q<J$^KcdX~R?%g?kU{Q+{X)Ea_)4A%ev002ovPDHLk
FV1j!`GEM*h

literal 0
HcmV?d00001

diff --git a/typo3/sysext/install/Resources/Public/Images/Icon/Information.png b/typo3/sysext/install/Resources/Public/Images/Icon/Information.png
new file mode 100644
index 0000000000000000000000000000000000000000..f61dc86814abf99ef378aca02d9bd40f207ce8e6
GIT binary patch
literal 724
zcmV;_0xSKAP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0007;Nkl<Zc-p0t
z-A|HX7>D~?^iSx0J85lt&|I4h@=ZI)tYMm{t#lP;gH?)&_ys6nLoh$`gYpYXQiKFv
z$=;BU(9|~vX3*AFCy=!)e?8KMwOl72Tqn<-`?{as?&m%P;6VIykf&eCJgE&!bJZdK
zc(X5&t>h9}$^|}4>6IS4$7cRlAkZx{Cse_Bc~1a6&L~FN%@ihk1R~uF(9+pBEweNG
z3P@Kbr^TOao?L~^7f1JW6ms($+#Ozq%CZWxYXc3VVbB#5N&3nJ^Oqo36UxYGU5xD(
zTVBQ?B}F#}f*A6=!;pIeH+ln*^as&9yAJuI0O(S4j4m0@NDFdQi?T9<4_592Y6rrQ
zkO<d|eth}1oubOfp{kpM<be+Z&m%b7^bAyCzbq}tZsmBBJqnG5$MqgRs*OHW894Mg
z*U?L;=wg4P_mEgY=%!ad7Z~}p;HaG48ee#i+P(nk^a_>tz2q_r0N5djwQiJk%n@9;
ztaroAMnEy0TWJ9;b8d}!H+Qq9I+g1@q{xGC^fQuQw^7>eL`j<i7YSmu10(Z9AXNV;
zu=55x55?mpRO-DDce-&&Gl$oaPekw?#mX5JliZ>v8)~{)Xlx<Sr`q{FL5)pTq;g`&
z6-A|%g;?c+joZMFpF61tfwvz~B)1YQ=z0=H!L3muXp`*;u8w8UVsq@yh#$T7HI%9x
z5H(NZykZJP^%k6~n?PaRI9f)0WW4j_`HC1VRHVn4f)Wifhx1KI=^zKw%nBq1H+k|?
zTxhVOTI+z$5`?6W1udvgl454xuS^w~7%IOje&+ThG*e4>=;jG)Xt#!tS8E0(Xo%Co
zM&`fEM4#4WQcQ=G%2V@{uqi<a8WW@=PmmrF*6+Ja2jUkvhRf`1K=g+I0000<MNUMn
GLSTY9U`kK`

literal 0
HcmV?d00001

diff --git a/typo3/sysext/install/Resources/Public/Images/login-icon-key.gif b/typo3/sysext/install/Resources/Public/Images/Icon/LoginIconKey.gif
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/login-icon-key.gif
rename to typo3/sysext/install/Resources/Public/Images/Icon/LoginIconKey.gif
diff --git a/typo3/sysext/install/Resources/Public/Images/Icon/Notice.png b/typo3/sysext/install/Resources/Public/Images/Icon/Notice.png
new file mode 100644
index 0000000000000000000000000000000000000000..abe2bd8a14fd8910bbcc3d56217b8d4de6f4b206
GIT binary patch
literal 487
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf-T<Ev*DF`9eERh1&Ye4N-@ZM6
z{`}|9pD$m&eB;KA+qZ8&d-m+nqerh^z54Ry%h#`8SFT)n;lhR2uV2rfKmYLI!zWLk
z{P^+X{rmTC-n{wy_wUoEPd|VD{Qdj)ix)5c@ZrPHpFb~Nytr=Nx;b;^?B2cm%$YOa
zzklDiZ{NX#2RCfk@bu}^vuDq~dGlt|rcLkOy?gxl@%r`auU@@+?%cV(d-rbLy7kGE
zC*Qt(J9g~YuV24TojP^*?%j<WHy%HJ{N>A+4<0=D`}gm^fB&97e%$ies~+eP`;s8P
z;Qtf>hCa0#aiCGNJY5_^DsJVTzb@2dAkg}dMX1VQR)a|O`&i+Rf91U+W%MQf?f!iB
z&Cx~Wi_JDv6}77uJ7;JyEqH3rlrU|5d@9d@#cQlC`6tyddMw(SQ&g+G<g<vvp0L{j
zLDP8|x1?5Fzfk`EhM<GtCmHQYU0m7G%paQ@R-CvQyqm4&!zRHZG4nZ00;m2u8FVMT
pVLIZUZ&bbJSJ^ARsQKAn7;pD$2bne;06LO^!PC{xWt~$(69AkiG_e2x

literal 0
HcmV?d00001

diff --git a/typo3/sysext/install/Resources/Public/Images/menuSystemEnvironment.png b/typo3/sysext/install/Resources/Public/Images/Icon/Ok.png
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/menuSystemEnvironment.png
rename to typo3/sysext/install/Resources/Public/Images/Icon/Ok.png
diff --git a/typo3/sysext/install/Resources/Public/Images/Icon/Warning.png b/typo3/sysext/install/Resources/Public/Images/Icon/Warning.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2e2e991ad67f6cc0baede3e73105d8166281b11
GIT binary patch
literal 619
zcmV-x0+juUP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006qNkl<Zc-p0t
zT}V@57{><#A+R8Wx`-fZ6(ORMnT_-+=t77JYh$f0#0!JE@G80}A`pY5E?iPnf-?%O
zC~Nj%(TqW9-|0TiK6KV`JNs<g**R-FU;kcC+JwjwFMc=A%kTH_T)Y|pOX9B&346UZ
z{$iIiHmr9<p6=8xIzZ&h8D~4vU(SIU+Hq`A0V0=0hxM#1WFVwm2tVAOoVmZP?7sui
zXL=h;S)fQ+C<24@#3j&otGgEt6y>VOlR6o40fndqLcE7W68PF*DNWz1sQPDs$WAWU
zPy8g@eGMuS??lF9#Z+IpW5Gb=ah)kS+6E{EaDk(6SsPS1uNjJ%MCf@d{MR>|<~#G{
z(y*;I@gp`0SqOvk9f7O2UWN4-AZ6cxqetMqs+*y@H<bPn2tTSFNRM}tO)=!d77{RH
za&XUV;1GDf8FGFK%*bgtFRtsD^X6n-Xs||9#4JSCfn30>26Dj`#NQdfx(|Z)HX+Yg
zAaXQ5cdRLVIJ-*sI}mzM^ETtT0lB~+AG&~?-$Vk3izm37z*7gnx%WZJQ3%=3W9-xl
zn;IZ;W5nJJMdBc&hQRxbDp`tb_85t51m`u7z<zL^y~z2R)icMtcEfR^q)|iPtEPGS
zr5aGg6yf_Xq?Af=mYgL)<}BhL@8DIdmePD1sI*Ssu0Zf+IVO9zBG9u1zH6J{y|NMR
zuJxGcT#HZbtMUHKN{pRcj@NC=;5c3aBE#OIu`c;L{{%)b0HuHOJ}3YH002ovPDHLk
FV1mQ+AWi@P

literal 0
HcmV?d00001

diff --git a/typo3/sysext/install/Resources/Public/Images/menuExtConfig.png b/typo3/sysext/install/Resources/Public/Images/Menu/AllConfiguration.png
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/menuExtConfig.png
rename to typo3/sysext/install/Resources/Public/Images/Menu/AllConfiguration.png
diff --git a/typo3/sysext/install/Resources/Public/Images/menuCleanup.png b/typo3/sysext/install/Resources/Public/Images/Menu/CleanUp.png
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/menuCleanup.png
rename to typo3/sysext/install/Resources/Public/Images/Menu/CleanUp.png
diff --git a/typo3/sysext/install/Resources/Public/Images/Menu/FolderStructure.png b/typo3/sysext/install/Resources/Public/Images/Menu/FolderStructure.png
new file mode 100644
index 0000000000000000000000000000000000000000..e1f8ea7b0539f387f7433d876fc271b3fe9e1d07
GIT binary patch
literal 152
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`@t!V@Ar-gYUf#&tV8G)NDCQ*c
zW&5)76D;Q4+dr_lE$Lu6qBP+`;GScb{+^q>yIfM(U^7p{{I}m7IHwq%?5>Rbt2g1e
zk`PlsDaVRe!e1S{R))$b+<e4eBUF)m!?^S&gYouj`GR|2$^xxo@O1TaS?83{1OWMt
BI5YqN

literal 0
HcmV?d00001

diff --git a/typo3/sysext/install/Resources/Public/Images/menuConfig.png b/typo3/sysext/install/Resources/Public/Images/Menu/ImportantActions.png
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/menuConfig.png
rename to typo3/sysext/install/Resources/Public/Images/Menu/ImportantActions.png
diff --git a/typo3/sysext/install/Resources/Public/Images/Menu/Logout.gif b/typo3/sysext/install/Resources/Public/Images/Menu/Logout.gif
new file mode 100644
index 0000000000000000000000000000000000000000..03417a7d4ca012b22a2dcf0184cb33531c19565e
GIT binary patch
literal 579
zcmZ?wbhEHb6krfwc*Xz%|3Tp2pRX(b{y6yiee0jk3;ujv_x(xg?=Q#xe82kd&$|zo
zG(KIk{CLgz>ury(cRjz}_WgFp@7t5=?@t@PKW+T}wCTt5&L1zQ{Cqv{=bMGU-mUrl
zarf^}`~G}A_vgpGe}6vw`}6VZ74wf5Ek9qg{dm##%XP;uH=I9RbN_t9@ALJ5ueW2r
z-Ov2~r0(0p`mYaxM)m%Bx8e84J-^=Xes@CS{YmZjCym~pHTiJP;?p^sZx5QkKWhE{
zsPp^7uJ6z0|9rLj-BFFtx4M74-1GhQk;j`{UmeMRb+qj98mEVAobIo7dc48q&{XSP
z6RfuPT5j#Oe7w@`V4vBEsg|2MEbcF~yg1Elf4AwbHj~{Qrgvu;ota>~quKb@1cMVD
zhNruYPIVcb>NYyrWptxe=UTny^+xUMP1@ILG_Tca0>cX&a#SD`f3h$#Fr+i+fXo8L
z2?P6rhV-W9Ca*THmd;i$dHJ@k<~BJ=Stc*f36l(@+8BcayLt?CC7it6xg!>|c**MO
zib@zc3a~_XdU1)b*A>&SU{BrQDx#{bqh-#T6xQwHCe16zVQI#i96nJ|Mwmy*%Abun
zCA8biUei>?HZCeHF<_#Cp}L8hO>EFiV`T>+>-aeiR*O{{o7weum`GNzofHtaJ7AEg
Q(cv{s&s$?2Ckul$01nX$?*IS*

literal 0
HcmV?d00001

diff --git a/typo3/sysext/install/Resources/Public/Images/Menu/SystemEnvironment.png b/typo3/sysext/install/Resources/Public/Images/Menu/SystemEnvironment.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3141e1f138d9f77f0d064f69bf94cee0a2509a2
GIT binary patch
literal 726
zcmV;{0xA88P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0007=Nkl<Zc-p0t
z{Yw*Z9LM`RcDJ1=NFXB$5hR4#PeCHF(`+c_!?HBpZVx`vHe=XKi!yRPjFD1WW~tTY
zoY~Z=&8;bA;<8gh%>B{>)rQf7z58-M%p&m@e|W)h-0StZ?|tvP2f(iQ??$2ja6;bn
zAw!NgmCt;7AR>PvjmX_eyxf&!$Z+gS*fEgrOJfz@l(62bz^#xK{mb0~U5hO!bsvYU
zj|t0q8Ft$MnaXC3Cr7W%nc!L-fc^D#nCGfM5U!o8{b-u0#zDI{nqn8T{{(WqsqtB!
z<aHto57q|DQ5h(OcIGVfgbG59{~R1|@8i-`C8Sn*U3!C#j|CK-WFt40Eleh|AacIb
zP)!#>HB|`BR1rLDLooW(aFR$~?@=UPrH!#b<`XI36>5Pk)Qn1h3DnP&L@a=MlHe`C
z_&YZMARJvo`^zTS=b8}LK=ZM{F-PLY!<9Rz3u>YB6_Ym^#NwxUa1%usTN@VSUz<PC
z{^Bx>6D8;mbwOgHHevzU17>4jxd)~Ihq{0cU%r19q>ta;$7Jhl12pa&7(8b%5bA`a
z_U}M1!{3~5M#sVx=qHu1_-hdT@l}vFe{aJ2{36O-+0c?eYp@<2J`0#?YHJB;w<Sj9
zU^*Nt_fRvTgvN6U_0ttt`mliZ*+!HNoq)=D5_(rI9B+D%VLJk*irV^!DK>HZezG+d
zuNIH^yQmt?hi)Vn+^_;_Cqa;N@OY^krr{DuG@^AzL&dgHAgP&V;~J@`*;5WDiL?bR
zFpL)C{D=~5WC;!;8(hT@mx-c8X1D#7_cqcjW2VCLP8m7^7WBQcp>N&>tIv$|)-*^|
zqA<e|d8fm~T%Z#eBV}M}DPE!zMI@XkLMHMA15-wAdzf~`A7{|4<$9tnPyhe`07*qo
IM6N<$f*egw(EtDd

literal 0
HcmV?d00001

diff --git a/typo3/sysext/install/Resources/Public/Images/menuImages.png b/typo3/sysext/install/Resources/Public/Images/Menu/TestSetup.png
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/menuImages.png
rename to typo3/sysext/install/Resources/Public/Images/Menu/TestSetup.png
diff --git a/typo3/sysext/install/Resources/Public/Images/menuUpdate.png b/typo3/sysext/install/Resources/Public/Images/Menu/UpdateWizard.png
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/menuUpdate.png
rename to typo3/sysext/install/Resources/Public/Images/Menu/UpdateWizard.png
diff --git a/typo3/sysext/install/Resources/Public/Images/menuAbout.png b/typo3/sysext/install/Resources/Public/Images/Menu/Welcome.png
similarity index 100%
rename from typo3/sysext/install/Resources/Public/Images/menuAbout.png
rename to typo3/sysext/install/Resources/Public/Images/Menu/Welcome.png
diff --git a/typo3/sysext/install/imgs/combine_back.jpg b/typo3/sysext/install/Resources/Public/Images/TestInput/BackgroundCombine.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/combine_back.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestInput/BackgroundCombine.jpg
diff --git a/typo3/sysext/install/imgs/greenback.gif b/typo3/sysext/install/Resources/Public/Images/TestInput/BackgroundGreen.gif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/greenback.gif
rename to typo3/sysext/install/Resources/Public/Images/TestInput/BackgroundGreen.gif
diff --git a/typo3/sysext/install/imgs/blackwhite_mask.gif b/typo3/sysext/install/Resources/Public/Images/TestInput/MaskBlackWhite.gif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/blackwhite_mask.gif
rename to typo3/sysext/install/Resources/Public/Images/TestInput/MaskBlackWhite.gif
diff --git a/typo3/sysext/install/imgs/combine_mask.jpg b/typo3/sysext/install/Resources/Public/Images/TestInput/MaskCombine.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/combine_mask.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestInput/MaskCombine.jpg
diff --git a/typo3/sysext/install/imgs/typo3logotype.ai b/typo3/sysext/install/Resources/Public/Images/TestInput/Test.ai
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/typo3logotype.ai
rename to typo3/sysext/install/Resources/Public/Images/TestInput/Test.ai
diff --git a/typo3/sysext/install/imgs/jesus.bmp b/typo3/sysext/install/Resources/Public/Images/TestInput/Test.bmp
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/jesus.bmp
rename to typo3/sysext/install/Resources/Public/Images/TestInput/Test.bmp
diff --git a/typo3/sysext/install/Classes/SystemEnvironment/TestImages/jesus.gif b/typo3/sysext/install/Resources/Public/Images/TestInput/Test.gif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/Classes/SystemEnvironment/TestImages/jesus.gif
rename to typo3/sysext/install/Resources/Public/Images/TestInput/Test.gif
diff --git a/typo3/sysext/install/imgs/jesus.jpg b/typo3/sysext/install/Resources/Public/Images/TestInput/Test.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/jesus.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestInput/Test.jpg
diff --git a/typo3/sysext/install/imgs/jesus.pcx b/typo3/sysext/install/Resources/Public/Images/TestInput/Test.pcx
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/jesus.pcx
rename to typo3/sysext/install/Resources/Public/Images/TestInput/Test.pcx
diff --git a/typo3/sysext/install/imgs/pdf_from_imagemagick.pdf b/typo3/sysext/install/Resources/Public/Images/TestInput/Test.pdf
similarity index 100%
rename from typo3/sysext/install/imgs/pdf_from_imagemagick.pdf
rename to typo3/sysext/install/Resources/Public/Images/TestInput/Test.pdf
diff --git a/typo3/sysext/install/Classes/SystemEnvironment/TestImages/jesus.png b/typo3/sysext/install/Resources/Public/Images/TestInput/Test.png
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/Classes/SystemEnvironment/TestImages/jesus.png
rename to typo3/sysext/install/Resources/Public/Images/TestInput/Test.png
diff --git a/typo3/sysext/install/imgs/jesus.tga b/typo3/sysext/install/Resources/Public/Images/TestInput/Test.tga
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/jesus.tga
rename to typo3/sysext/install/Resources/Public/Images/TestInput/Test.tga
diff --git a/typo3/sysext/install/imgs/jesus.tif b/typo3/sysext/install/Resources/Public/Images/TestInput/Test.tif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/jesus.tif
rename to typo3/sysext/install/Resources/Public/Images/TestInput/Test.tif
diff --git a/typo3/sysext/install/imgs/jesus2_transp.gif b/typo3/sysext/install/Resources/Public/Images/TestInput/Transparent.gif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/jesus2_transp.gif
rename to typo3/sysext/install/Resources/Public/Images/TestInput/Transparent.gif
diff --git a/typo3/sysext/install/imgs/jesus2_transp.png b/typo3/sysext/install/Resources/Public/Images/TestInput/Transparent.png
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/imgs/jesus2_transp.png
rename to typo3/sysext/install/Resources/Public/Images/TestInput/Transparent.png
diff --git a/typo3/sysext/install/Resources/Public/Images/TestReference/About.txt b/typo3/sysext/install/Resources/Public/Images/TestReference/About.txt
new file mode 100644
index 000000000000..347bec3fde60
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/Images/TestReference/About.txt
@@ -0,0 +1,33 @@
+These comparison images was generated by Kasper Skårhøj, using:
+
+- TYPO3 3.8.0
+
+- Image Magick 5.5.7 / FreeType 2 / PHP4
+
+- This localconf.php configuration:
+$TYPO3_CONF_VARS['GFX']['im_path_lzw'] = '';
+$TYPO3_CONF_VARS['GFX']['TTFdpi'] = '96';
+$TYPO3_CONF_VARS['GFX']['gdlib_png'] = '1';
+$TYPO3_CONF_VARS['GFX']['im_combine_filename'] = 'composite';
+$TYPO3_CONF_VARS['GFX']['im_path'] = '/usr/bin/';
+$TYPO3_CONF_VARS['GFX']['im_version_5'] = 'im5';
+$TYPO3_CONF_VARS['GFX']['im_imvMaskState'] = '0';
+$TYPO3_CONF_VARS['GFX']['im_v5effects'] = '1';
+$TYPO3_CONF_VARS['GFX']['gdlib_2'] = 1;
+$TYPO3_CONF_VARS['GFX']['im_mask_temp_ext_noloss'] = 'png';
+
+- PHP / GD configuration:
+GD Support		enabled
+GD Version		2.0 or higher
+FreeType Support	enabled
+FreeType Linkage	with freetype
+T1Lib Support		enabled
+GIF Read Support	enabled
+GIF Create Support	enabled
+JPG Support		enabled
+PNG Support		enabled
+WBMP Support		enabled
+
+- I was not able to create GIF files for reference so I just converted them directly with ImageMagick
+
+- Also LZW compression has NOT been used anywhere except the GD test images since ImageMagick doesn't support it.
diff --git a/typo3/sysext/install/verify_imgs/install_44f1273ab1.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Combine-1.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_44f1273ab1.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Combine-1.jpg
diff --git a/typo3/sysext/install/verify_imgs/install_fcaf26c521.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Combine-2.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_fcaf26c521.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Combine-2.jpg
diff --git a/typo3/sysext/install/Resources/Public/Images/TestReference/Font.gif b/typo3/sysext/install/Resources/Public/Images/TestReference/Font.gif
new file mode 100644
index 0000000000000000000000000000000000000000..dcebc7280f628d7c42d66cd40ed617ccafafb556
GIT binary patch
literal 732
zcmV<20weuLNk%v~VaNb70OJ4v|Nl4X4qN%cK<-LX>nv9EhDrS3JMm~u_M}7r00000
z00000000000000000000EC2ui0LTC`000F35XecZy*TU5yZ>M)j$~<`XsWJk>%MR-
z&vb3yc&_g}8T`QDuQlu$k0PNmP%2WKF{n<8JW+kj-SxJuj=CYROgtldJy5}b5FivR
zh{2C=5J;ByY#vZx6A%`CZEsz807D0Cdrx{2YJP7TOLBk|2mu2VLxOG=kApT&1xf@I
zqe^)~i+Kk^b`x?zt&J6iKe1U-P^Uqq8B3R$6l|4;0kc5D61+gZWmy7kuWA920Bi*Y
z00wHBw8o4Cb_R0FmjRXM-;5S>udA!k;*N6G7gB8R@{H&b=aurN)uT~F&bw`Gyd7j$
ztI>~Q1`<l3WC{$GhYd4M3~(@_vwQxuMje1vjgh@k!VFUINH7bVC3=tz$i}cHxSDLV
zO^CS8Te|={ed2`K6COgKM}rzu%JLe~mZ=Oad->ztMTfMUT$S`~YfYj>Z&GOWrqxKB
zi@-v4sx*UvI1<GQHR>eiN{e0dYGfPcn>?Ove=wD3cS@FlAGGS7yNcq3b6kH~C=3Ad
zMtdEul*9D%BxeAKa}<eoOy^r=0}yC4Fv=ORy>i9=^9Mx3YqX#-X%p~r0_g*$<Jj(3
zLES=Q#AgHe9b8!yJ<Ni56JiZn5h%JE;rcO4gY{f~g>;_~y>^E0!{Rdf?!3GiD~$vs
znp4O3d`!irn#Z0sB&4Pp2$OQ%ItV}#n|v?Paa;ugYDZi~oM5)xeF~mo1WFcuz!L`V
zWyr$-0<3mQejWyR42NNrXv7j{sfeOrD7xq&g13+;V>k;Mb>oga_UPk}Kn5w~kVF<~
z<dH}wspOJOHtFP(P(~@`lvGw}<&{`wspXbjcIoApV1_B?m}Hh|=9y@wspgt&w&~`Z
OaK<U;oOJRK0RTJy>qGtk

literal 0
HcmV?d00001

diff --git a/typo3/sysext/install/verify_imgs/install_d1fa76faad.gif b/typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-box.gif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_d1fa76faad.gif
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-box.gif
diff --git a/typo3/sysext/install/verify_imgs/install_d1fa76faad.png b/typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-box.png
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_d1fa76faad.png
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-box.png
diff --git a/typo3/sysext/install/verify_imgs/install_48784f637a.gif b/typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-niceText.gif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_48784f637a.gif
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-niceText.gif
diff --git a/typo3/sysext/install/verify_imgs/install_48784f637a.png b/typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-niceText.png
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_48784f637a.png
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-niceText.png
diff --git a/typo3/sysext/install/verify_imgs/install_fe1e67e805.gif b/typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-shadow.gif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_fe1e67e805.gif
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-shadow.gif
diff --git a/typo3/sysext/install/verify_imgs/install_fe1e67e805.png b/typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-shadow.png
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_fe1e67e805.png
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-shadow.png
diff --git a/typo3/sysext/install/verify_imgs/install_f6b0cedc4d.gif b/typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-simple.gif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_f6b0cedc4d.gif
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-simple.gif
diff --git a/typo3/sysext/install/verify_imgs/install_f6b0cedc4d.png b/typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-simple.png
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_f6b0cedc4d.png
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-simple.png
diff --git a/typo3/sysext/install/verify_imgs/install_a8f7a333c8.gif b/typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-text.gif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_a8f7a333c8.gif
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-text.gif
diff --git a/typo3/sysext/install/verify_imgs/install_a8f7a333c8.png b/typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-text.png
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_a8f7a333c8.png
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-text.png
diff --git a/typo3/sysext/install/verify_imgs/install_read_ai.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Read-ai.jpg
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_read_ai.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Read-ai.jpg
diff --git a/typo3/sysext/install/verify_imgs/install_read_bmp.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Read-bmp.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_read_bmp.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Read-bmp.jpg
diff --git a/typo3/sysext/install/verify_imgs/install_read_gif.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Read-gif.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_read_gif.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Read-gif.jpg
diff --git a/typo3/sysext/install/verify_imgs/install_read_jpg.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Read-jpg.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_read_jpg.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Read-jpg.jpg
diff --git a/typo3/sysext/install/verify_imgs/install_read_pcx.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Read-pcx.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_read_pcx.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Read-pcx.jpg
diff --git a/typo3/sysext/install/verify_imgs/install_read_pdf.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Read-pdf.jpg
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_read_pdf.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Read-pdf.jpg
diff --git a/typo3/sysext/install/verify_imgs/install_read_png.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Read-png.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_read_png.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Read-png.jpg
diff --git a/typo3/sysext/install/verify_imgs/install_read_tga.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Read-tga.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_read_tga.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Read-tga.jpg
diff --git a/typo3/sysext/install/verify_imgs/install_read_tif.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Read-tif.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_read_tif.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Read-tif.jpg
diff --git a/typo3/sysext/install/verify_imgs/install_scale_gif.gif b/typo3/sysext/install/Resources/Public/Images/TestReference/Scale-gif.gif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_scale_gif.gif
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Scale-gif.gif
diff --git a/typo3/sysext/install/verify_imgs/install_scale_jpg.jpg b/typo3/sysext/install/Resources/Public/Images/TestReference/Scale-jpg.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_scale_jpg.jpg
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Scale-jpg.jpg
diff --git a/typo3/sysext/install/verify_imgs/install_scale_png.png b/typo3/sysext/install/Resources/Public/Images/TestReference/Scale-png.png
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_scale_png.png
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Scale-png.png
diff --git a/typo3/sysext/install/verify_imgs/install_write_gif.gif b/typo3/sysext/install/Resources/Public/Images/TestReference/Write-gif.gif
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_write_gif.gif
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Write-gif.gif
diff --git a/typo3/sysext/install/verify_imgs/install_write_png.png b/typo3/sysext/install/Resources/Public/Images/TestReference/Write-png.png
old mode 100755
new mode 100644
similarity index 100%
rename from typo3/sysext/install/verify_imgs/install_write_png.png
rename to typo3/sysext/install/Resources/Public/Images/TestReference/Write-png.png
diff --git a/typo3/sysext/install/Resources/Public/Images/input-background.gif b/typo3/sysext/install/Resources/Public/Images/input-background.gif
deleted file mode 100644
index 1f4859e0f4e7b20b42d183f97a797d9550e71d70..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 59
zcmZ?wbhEHbWM^P!_{hTW|NsBrzkfe{`t<ba(~3V?SQ!{t7<3qb03^@A#52c!k@iFR
NhB;eqMKds10|2eC6#)PM

diff --git a/typo3/sysext/install/Resources/Public/Images/menuDatabase.png b/typo3/sysext/install/Resources/Public/Images/menuDatabase.png
deleted file mode 100644
index 92e7514b64baff8191d3f09435742935d6376351..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 448
zcmV;x0YCnUP)<h;3K|Lk000e1NJLTq000mG000mO1ONa4wfZ;e0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzVo5|nR2Ufr!M#h=aU1~P=lAn2jgYgm
z14$ghB1wX1Y;1{!f~cXk9Glvs|DY*oXfX+*sV$*J3Cbu4(y}P%MM+A~#FzB!y!(DX
zJx{@0cU+8XF%rij=a0VS@t8i70L-13eZLUvu^Ty3Y{g1^ikX))g8<$=UyX=}h=_=Y
zh)(>77Y_kSqcs5l3jOkVfJzoN>{Hbx?Af+vKme!&Dt7D%NmE-F5`anwrK&EaBnyQp
zsR2-Cp(E+YlApe48Z_k5*@?xw_bFbloND~jl2j#cjM~spT5`xU-w#v*9UWOIsVi)I
ztJ{dIcj8{N%(5iO!Yh61zPh5my4dV@eC$q?$zL^96n1TC>$9dUx0_b{R>t+uJIi_v
zIOvide+-+A*8btzrVrzr{RPuU^6j`>)OsWfPFpsl?U%!zSgI5NlfC(9C(qy99;;nA
q`E=d<)z;(Y)Pr*X0N_^K2!Q{a;k8+x*zf%S0000<MNUMnLSTZF#myD~

diff --git a/typo3/sysext/install/Resources/Public/Images/menuPhpinfo.png b/typo3/sysext/install/Resources/Public/Images/menuPhpinfo.png
deleted file mode 100644
index ed3bfd34c197e6afb35af1d214c5e31db302f752..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 479
zcmV<50U-W~P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004|Nkl<Zc-oDV
zOG^S#6o7jy`T+$I6tw9V7`CcS`yLh%5pCO)M7FI>N^46OBlOs0X#|0bY|}Q2T3I_u
z+|1~t%*#>7*Xf=MSLT|M!p9xY<MZA#*FFHCkk2^5L2&-VBw>K{*#(YDrJ~kqwMM;O
zhfa_@1Ofp+le7z**jy|Y!8FYlnx=uGD3HtLs6>(^2nK^K32W|00Tz_YWw0y@SBha6
zpsFg!vP=b~QVH-!1VNw@Dsawh4-St^%}4J(VAmamea}5CuY@Q&?g(6m6OhS>Kz7I-
ziOz%+4K2BZ11x4FKSf;s5WaZ<QOpuVPOyi`#A}*1#$riwUY$L2ajc6*-=I(^Z~_ez
z-|0MTZe7s^QPS`kV_f|3C<Yswm!Ru9CurKYjfJU{%#OmvaW<~i5Dt<PToA})En0jV
zd1u?jm5XD{fBKB~ffI}o9=Z+A9`~KZA)8fr0lvnC#k0}bIgi)tdxW+1b54NYk4ZfK
z^aVe89jetT!U?#G)CRu$PIMJCG0`IpCSa0ja)nJy^wLaf4g3Sz1rsPiYmYdv=NICw
Vo+;JLH<|zd002ovPDHLkV1gI2&h-EQ

diff --git a/typo3/sysext/install/Resources/Public/Images/menuTypo3confEdit.png b/typo3/sysext/install/Resources/Public/Images/menuTypo3confEdit.png
deleted file mode 100644
index 13481f95cad2a179260eb76540ed038a9001962e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 392
zcmV;30eAk1P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0003`Nkl<Zc-p1Y
zF-QVo7{>9|*217AT&g7y!6p}xhG^)7mK+SD!HT3IXltn{gu0Nx;M}s*NP=ugs7Q;{
z3$8+<LoKcgi?9Yexl@uSJgDUeKe*x9-rxV5zBT~5Mtt~^Ftz8S)O*(NXr$>;+yzZf
zkK2RY!~s6+z(Z&jvXFryvdC`Qkz6*%NMDDP+l3-rq9$Ielk+FY&{Ts6D<3H+&tVi}
zbC9@Db83L~kI6*%TRKFQpT-wAkDH(q#k~b&HYhZ2$Z)|8>3#_H&oz|dF7WGC{NCxn
z{{+tHep0Lr9Iy7FQaWvgwSmBt(b&WSdw_Jr(+X<?es2#dLK^kgTO2J}klHe%aNz~V
zjNod;qT-f;n#iIYoy1$fhNQ=UsJjdC#Q_lg1*g3OImU%5w}Ubl!MShv4-*B(ZJn5~
m8^Fx;sxaZR?(6)G<of|tT=ynjDzlLQ0000<MNUMnLSTZNJGdGE

diff --git a/typo3/sysext/install/Resources/Public/Images/menuTypo3temp.png b/typo3/sysext/install/Resources/Public/Images/menuTypo3temp.png
deleted file mode 100644
index 222b9440987bf686204736086a09b226048d7587..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 608
zcmV-m0-ybfP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006fNkl<Zc-oDV
zOKTHR7=~5EKj2Oj)Sd21v=L2EP;ez^OYs6?S0dC)kuKb1p+>P(CDKF)D!AyPpdu|u
zRTQg5Yil*NB~61SElo3%$;@Oj*Gw+;^_&Bl21hXi&*JdS`y9S^m^A<x<k?K{5L*Ak
zR>C?b*C6oNwq2}Nt1Goy4S$2o5e|p%Ig&pFtu$;H229g*P*oL*qCgM?CgFJ=kx0am
z)Wd7T*LQRk;-?{fKMC>MaR^^JAbf5IH+F<T&dYHouq+Gol4vx_Bup^$pk@8nVeeBt
z-2*Gr3p0HKM)E4u*(=C>I11^<6NsYVT8VW+1<RlO+xT&xY4iOs=Fh-d3_+U<Kp1O-
zk{WbYkt7NEd>$OftqR1c{TuQV{-B!dg3aHD7CQ{%XD>3Z_Mn&=0O^I6$0VAju|8y3
zUKI!vK5y>hUeV@4C}r+Io9Tp+2x4i(2XXo)p%233HRPu5LK9Qab)AVE0SQkQ=PyE;
zJqI~<7J4#B1h=5Z0?55Nf$T^d5|6e+oEbpLP-uw^N5H-J_GI7gzWwgu&c|}RkKF7>
zaXJ8L`~sGS4<S2x8Kpvstx_(RDRd=A;Cx1UsMsnNp0|K|eGKVm`%p*>(jcQ!sZeP6
z--7IDCo(S%l3UNCVijEB2Hb+srA^%nLkFNPzNAA3CUN5yba!k#Wl3|t=%7hf>Vmpt
u7b(c3gJ#0yU7h}bje;#yLaj~Wp_$)bTE*V0!gJaH0000<MNUMnLSTYIO%6~1

diff --git a/typo3/sysext/install/Resources/Public/Images/numbers.png b/typo3/sysext/install/Resources/Public/Images/numbers.png
deleted file mode 100644
index 293bce0b327201a02c66b062b15635aecf3d069d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3734
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
Q_#NW2!q}oK%st}&4@y)EYybcN

diff --git a/typo3/sysext/install/Resources/Public/Javascript/Install.js b/typo3/sysext/install/Resources/Public/Javascript/Install.js
new file mode 100644
index 000000000000..23ae3c207960
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/Javascript/Install.js
@@ -0,0 +1,60 @@
+/***************************************************************
+ *
+ *  Various JavaScript functions for the Install Tool
+ *
+ *  Copyright notice
+ *
+ *  (c) 2009-2010 Marcus Krause, Helmut Hummel, Lars Houmark
+ *  (c) 2013 Wouter Wolters <typo3@wouterwolters.nl>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 backend provided by
+ *  Kasper Skaarhoj <kasper@typo3.com> together with TYPO3
+ *
+ *  Released under GNU/GPL (see license file in /typo3/)
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of this script
+ *
+ ***************************************************************/
+
+/**
+ * Small javascript helpers of the install tool based on jquery
+ *
+ * @author Wouter Wolters <typo3@wouterwolters.nl>
+ */
+$(document).ready(function() {
+	// Used in database compare section to select/deselect checkboxes
+	$('.checkall').on('click', function() {
+		$(this).closest('fieldset').find(':checkbox').prop('checked', this.checked);
+	});
+
+	// Toggle open/close
+	$('.toggleButton').on('click', function() {
+		$(this).closest('.toggleGroup').find('.toggleData').toggle();
+	});
+
+	// Simple password strength indicator
+	$('.t3-install-form-password-strength').on('keyup', function() {
+		var value = $(this).val();
+		var strongRegex = new RegExp('^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$', 'g');
+		var mediumRegex = new RegExp('^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$', 'g');
+		var enoughRegex = new RegExp('(?=.{6,}).*', 'g');
+
+		if (value.length == 0) {
+			$(this).attr('style', 'background-color:#FBB19B; border:1px solid #DC4C42');
+		} else if (false == enoughRegex.test(value)) {
+			$(this).attr('style', 'background-color:#FBB19B; border:1px solid #DC4C42');
+		} else if (strongRegex.test(value)) {
+			$(this).attr('style', 'background-color:#CDEACA; border:1px solid #58B548');
+		} else if (mediumRegex.test(value)) {
+			$(this).attr('style', 'background-color:#FBFFB3; border:1px solid #C4B70D');
+		} else {
+			$(this).attr('style', 'background-color:#FBFFB3; border:1px solid #C4B70D');
+		}
+	});
+
+});
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Public/Javascript/install.js b/typo3/sysext/install/Resources/Public/Javascript/install.js
deleted file mode 100644
index 46d413dac24b..000000000000
--- a/typo3/sysext/install/Resources/Public/Javascript/install.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/***************************************************************
- *
- *  Various JavaScript functions for the Install Tool
- *
- *  Copyright notice
- *
- *  (c) 2009-2010 Marcus Krause, Helmut Hummel, Lars Houmark
- *  (c) 2013 Wouter Wolters <typo3@wouterwolters.nl>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 backend provided by
- *  Kasper Skaarhoj <kasper@typo3.com> together with TYPO3
- *
- *  Released under GNU/GPL (see license file in /typo3/)
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of this script
- *
- ***************************************************************/
-
-/**
- * Method to detect if Install Tool is loaded as standalone
- * If this is the case then an extra class will be added to the body tag
- *
- * @author Wouter Wolters <typo3@wouterwolters.nl>
- */
-$(document).ready(function() {
-	if (top.location === document.location) {
-		// standalone-mode, add class to the body tag
-		$('body').addClass('standalone');
-	}
-
-	$('#encryptionKey').click(function() {
-		$.ajax({
-			url: '../../index.php?eID=tx_install_ajax&cmd=encryptionKey'
-		}).done(function(data) {
-			$('#t3-install-form-encryptionkey').val(data);
-		});
-	});
-
-	// Used in database compare section to select/deselect checkboxes
-	$('.checkall').on('click', function() {
-		$(this).closest('fieldset').find(':checkbox').prop('checked', this.checked);
-	});
-
-});
\ No newline at end of file
diff --git a/typo3/stylesheets/install/install.css b/typo3/sysext/install/Resources/Public/Stylesheets/Action/Common/EarlyExit.css
similarity index 52%
rename from typo3/stylesheets/install/install.css
rename to typo3/sysext/install/Resources/Public/Stylesheets/Action/Common/EarlyExit.css
index a2d5cdbea084..b055c6dbab0c 100644
--- a/typo3/stylesheets/install/install.css
+++ b/typo3/sysext/install/Resources/Public/Stylesheets/Action/Common/EarlyExit.css
@@ -1,22 +1,14 @@
 @charset "UTF-8";
 
-/* Font size 62.8% = 1em = 10px */
 body {
+	/* Font size 62.8% = 1em = 10px */
 	font: 62.8% Verdana, Arial, Helvetica, sans-serif;
-	background-color: #f2f2f2;
 	padding-top: 11em;
-}
-
-body.standalone {
-	background: #4f4f4f url('../../gfx/installbackground.jpg') repeat-x fixed;
+	background: #4f4f4f;
 }
 
 h1 {
-	display: none;
-}
-
-.standalone h1 {
-	background: url('../../sysext/t3skin/images/login/typo3logo-white-greyback.gif') no-repeat scroll 0 0 transparent;
+	background: url('../../../Images/Background/Logo.gif') no-repeat scroll 0 0 transparent;
 	text-indent: -999em;
 	display: block;
 	height: 34px;
@@ -43,23 +35,11 @@ h2 {
 }
 
 .message-warning {
-	background-image: url("../../gfx/warning.png");
+	background-image: url("../../../Images/Icon/Warning.png");
 	background-color: #fbf6de;
 	border-color: #b1905c;
 }
 
 .typo3-message ul {
 	padding-left: 20px;
-}
-
-.typo3-message a {
-	color: #9e7d4a;
-}
-
-.typo3-message a:hover {
-	color: #000000;
-}
-
-.standalone .t3-install-locked-user-settings {
-	display: none;
-}
+}
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Public/Stylesheets/Action/Common/Install.css b/typo3/sysext/install/Resources/Public/Stylesheets/Action/Common/Install.css
new file mode 100644
index 000000000000..b4a52847d085
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/Stylesheets/Action/Common/Install.css
@@ -0,0 +1,616 @@
+@charset "UTF-8";
+
+/* http://meyerweb.com/eric/tools/css/reset/ */
+/* v1.0 | 20080212 */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend
+table, caption, tbody, tfoot, thead, tr, th, td {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	font-size: 100%;
+	vertical-align: baseline;
+	background: transparent;
+}
+body {
+	line-height: 1;
+}
+ol, ul {
+	list-style: none;
+}
+blockquote, q {
+	quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+	content: none;
+}
+
+/* remember to define focus styles! */
+:focus {
+	outline: 0;
+}
+
+/* remember to highlight inserts somehow! */
+ins {
+	text-decoration: none;
+}
+del {
+	text-decoration: line-through;
+}
+
+/* tables still need 'cellspacing="0"' in the markup */
+table {
+	border-collapse: collapse;
+	border-spacing: 0;
+}
+
+
+/* Font size 62.8% = 1em = 10px */
+body {
+	font: 62.8% Verdana, Arial, Helvetica, sans-serif;
+}
+
+pre {
+	font-size: 1.2em;
+	margin: 1em 1em;
+}
+
+code {
+	font-size: 1.2em;
+}
+
+p, form, fieldset, h3, h4, h5, h6, dl {
+	margin: 1em 0 1em 0;
+}
+
+ol, ul {
+	margin: 1em 0 1em 1.5em;
+	padding: 0 0 0 1em;
+}
+
+ul {
+	list-style: disc;
+}
+
+ol {
+	list-style: decimal;
+}
+
+dl dd {
+	margin-left: 1.5em;
+}
+
+fieldset li p {
+	margin-top: 0;
+}
+
+h2 {
+	margin: 2.5em 0 1.7em 0.8em;
+	color: #585858;
+	font-size: 120%;
+	font-weight: bold;
+}
+
+h3 {
+	font-size: 120%;
+	margin: 0.7em 0 1.5em
+}
+
+h4 {
+	font-size: 110%;
+	margin: 0;
+}
+
+.clearfix:after {
+	content: ".";
+	display: block;
+	height: 0;
+	clear: both;
+	visibility: hidden;
+}
+
+* html .clearfix {
+	height: 1%;
+}
+
+legend {
+	margin-left: 1em;
+	font-weight: bold;
+}
+
+fieldset ol {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+}
+
+fieldset li {
+	margin-bottom: 0.5em;
+	float: left;
+	clear: left;
+	width: 100%;
+}
+
+label {
+	float: left;
+	width: 18em;
+	margin-right: 1em;
+	padding: 0.2em 0;
+}
+
+fieldset span {
+	float: left;
+	width: 29em;
+}
+
+.t3-install-form-label-after input {
+	float: left;
+}
+
+.t3-install-form-label-after label,
+.t3-install-form-label-above label {
+	float: none;
+	display: block;
+	width: auto;
+	margin-right: 0;
+}
+
+.t3-install-form-label-above label {
+	margin-bottom: 0.5em;
+}
+
+.t3-install-form-label-after label {
+	padding-left: 3em;
+}
+
+.t3-install-form-label-width-7 label {
+	width: 7em;
+}
+
+.t3-install-form-label-width-21 label {
+	width: 21em;
+}
+
+fieldset.t3-install-form-submit {
+	float: none;
+	width: auto;
+}
+
+.t3-install-login fieldset.t3-install-form-submit {
+	margin-left: 8em;
+}
+
+fieldset select,
+input.t3-install-form-input-text,
+textarea {
+	border: 1px solid #7c7c7c;
+	color: #000000;
+	font-size: 1.1em;
+	line-height: 1.7em;
+	margin: 0;
+	width: 20em;
+}
+
+fieldset select {
+	height: 2em;
+	padding: 0.2em;
+	width: 17.4em;
+}
+
+input.t3-install-form-input-text {
+	height: 1.7em;
+	padding: 0.1em 0.1em 0 0.45em;
+}
+
+textarea {
+	width: 99%;
+	font-size: 1.2em;
+}
+
+button {
+	color: #606060;
+	font-size: 1.1em;
+	padding: 0.3em 0.6em;
+	border: 1px solid #7c7c7c;
+	background: #f6f6f6 url('../../../Images/Background/Button.jpg') repeat-x left bottom;
+	cursor: pointer;
+}
+
+button:hover {
+	background-color: #ededed;
+	background-image: url('../../../Images/Background/ButtonHover.jpg');
+}
+
+button span {
+	background-repeat: no-repeat;
+	display: inline-block;
+	width: 16px;
+	height: 16px;
+	margin-left: 0.6em;
+	float: none;
+}
+
+button span.t3-install-form-button-icon-negative {
+	background-image: url('../../../Images/Icon/Error.png');
+}
+
+button span.t3-install-form-button-icon-positive {
+	background-image: url('../../../Images/Icon/Ok.png');
+}
+
+.t3-install-hidden {
+	display: none;
+}
+
+.t3-install-strong {
+	font-weight: bold;
+}
+
+#t3-install-outer {
+	width: 76em;
+	margin: 1em auto;
+}
+
+#t3-install-left {
+	float: left;
+	width: 19em;
+	clear: both;
+}
+
+#t3-install-right {
+	padding-left: 19em;
+	width: 57em;
+}
+
+#t3-install-menu {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+	width: 16em;
+	font-size: 110%;
+	line-height: 2em;
+}
+
+#t3-install-menu li {
+	padding: 0.35em 0 0.35em 2.8em;
+}
+
+#t3-install-menu li.act {
+	background-color: #585858;
+	line-height: 1.5em;
+}
+
+#t3-install-menu a {
+	color: #606060;
+	text-decoration: none;
+}
+
+#t3-install-menu a:hover {
+	color: #111;
+}
+
+#t3-install-menu li.act a {
+	font-weight: bold;
+	color: #ffffff;
+}
+
+#t3-install-menu li {
+	background-repeat: no-repeat;
+	background-position: 0.7em center;
+}
+
+#t3-install-menu #t3-install-menu-importantActions {
+	background-image: url('../../../Images/Menu/ImportantActions.png');
+}
+
+#t3-install-menu #t3-install-menu-systemEnvironment {
+	background-image: url('../../../Images/Menu/SystemEnvironment.png');
+}
+
+#t3-install-menu #t3-install-menu-folderStructure {
+	background-image: url('../../../Images/Menu/FolderStructure.png');
+}
+
+#t3-install-menu #t3-install-menu-updateWizard {
+	background-image: url('../../../Images/Menu/UpdateWizard.png');
+}
+
+#t3-install-menu #t3-install-menu-testSetup {
+	background-image: url('../../../Images/Menu/TestSetup.png');
+}
+
+#t3-install-menu #t3-install-menu-allConfiguration {
+	background-image: url('../../../Images/Menu/AllConfiguration.png');
+}
+
+#t3-install-menu #t3-install-menu-cleanUp {
+	background-image: url('../../../Images/Menu/CleanUp.png');
+}
+
+#t3-install-menu #t3-install-menu-welcome {
+	background-image: url('../../../Images/Menu/Welcome.png');
+}
+
+#t3-install-menu #t3-install-menu-logout {
+	background-image: url('../../../Images/Menu/Logout.gif');
+}
+
+#t3-install-links {
+	margin: 2em 0 0 0.8em;
+	padding: 0;
+	list-style: none;
+	width: 15.2em;
+	font-size: 110%;
+	line-height: 2em;
+}
+
+#t3-install-links a {
+	color: #797878;
+	text-decoration: none;
+}
+
+#t3-install-links a:hover {
+	text-decoration: underline;
+}
+
+#t3-install-box-body {
+	font-size: 110%;
+	line-height: 1.7em;
+	padding: 0.1em 1.8em 1.8em 1.8em;
+	color: #606060;
+}
+
+.t3-install-login #t3-install-box-body {
+	padding: 0.1em 0 0 3.6em;
+}
+
+#t3-install-box-body h3 {
+	margin: 0.75em 0 2em;
+}
+
+.t3-install-login #t3-install-box-body h3 {
+	margin: 1em 0;
+}
+
+#t3-install-box-body a {
+	color: #606060 !important;
+	text-decoration: underline !important;
+}
+
+#t3-install-box-body a:hover {
+	color: #111 !important;
+}
+
+
+
+.typo3-message {
+	padding: 0.6em 0.6em 0.6em 2.6em;
+	background-repeat: no-repeat;
+	background-position: 0.5em 0.7em;
+	border: 1px solid;
+	color: #000000;
+}
+
+.typo3-message h4 {
+	margin-top: 0;
+}
+
+.message-notice {
+	background-image: url("../../../Images/Icon/Notice.png");
+	background-color: #f6f7fa;
+	border-color: #c2cbcf;
+}
+
+.message-information {
+	background-image: url("../../../Images/Icon/Information.png");
+	background-color: #ddeef9;
+	border-color: #8aafc4;
+}
+
+.message-ok {
+	background-image: url("../../../Images/Icon/Ok.png");
+	background-color: #cdeaca;
+	border-color: #58b548;
+}
+
+.message-warning {
+	background-image: url("../../../Images/Icon/Warning.png");
+	background-color: #fbffb3;
+	border-color: #c4b70d;
+}
+
+.message-error {
+	background-image: url("../../../Images/Icon/Error.png");
+	background-color: #fbb19b;
+	border-color: #dc4c42;
+}
+
+#t3-install-copyright {
+	color: #797878;
+	border-top: 1px #5f5f5f solid;
+	margin-top: 3.7em;
+	clear: both;
+}
+
+#t3-install-copyright a {
+	color: #797878;
+}
+
+body {
+	background-color: #f2f2f2;
+}
+
+h1,
+#t3-install-menu-border-top,
+#t3-install-menu-bottom,
+#t3-install-links,
+#t3-install-box-border-top,
+#t3-install-box-border-bottom,
+#t3-install-copyright {
+	display: none;
+}
+
+#t3-install-box-body,
+#t3-install-menu {
+	border: 1px #dcdcdc solid;
+	background-color: #ffffff;
+}
+
+#systemInformation dt {
+	float: left;
+	width: 11em;
+}
+
+#systemInformation dd {
+	padding-left: 11em;
+	font-weight: bold;
+}
+
+#t3-install-imagemagickversions td {
+	padding-right: 1em;
+}
+
+.t3-install-definitionlist dt {
+	float: left;
+	width: 19em;
+}
+.t3-install-definitionlist dd {
+	font-weight: bold;
+	padding-left: 19em;
+}
+.t3-install-definitionlist dd span {
+	font-weight: normal;
+}
+
+.t3-install-displaytwinimagetextarea {
+	width: 48em;
+	overflow: scroll;
+	border: 1px #797878 solid;
+}
+
+.t3-install-displaytwinimagetextarea textarea {
+	width: 300em;
+	border: 0;
+}
+
+.t3-install-displaytwinimageimages,
+.t3-install-displaytwinimagereference,
+.t3-install-displaytwinimagedifferentfilesize {
+	width: 100%;
+	margin: 0.3em 0;
+}
+
+.t3-install-displaytwinimageimages td {
+	width: 50%;
+	vertical-align: top;
+}
+
+.t3-install-displaytwinimageimages td,
+.t3-install-displaytwinimagereference th,
+.t3-install-displaytwinimagereference td,
+.t3-install-displaytwinimagedifferentfilesize th,
+.t3-install-displaytwinimagedifferentfilesize td {
+	text-align: center;
+}
+
+/* 5: All configuration */
+.t3-install-description {
+	word-wrap: break-word;
+	width: 48em;
+}
+
+/* Stylesheet for the standalone version of the Install Tool */
+
+body.standalone {
+	background: #4f4f4f url('../../../Images/Background/Body.jpg') repeat-x fixed;
+}
+
+body.standalone #t3-install-outer {
+	margin: 0 auto;
+}
+
+body.standalone h1,
+body.standalone #t3-install-menu-border-top,
+body.standalone #t3-install-menu-bottom,
+body.standalone #t3-install-links,
+body.standalone #t3-install-box-border-top,
+body.standalone #t3-install-box-border-bottom,
+body.standalone #t3-install-copyright {
+	display: block;
+}
+
+body.standalone #t3-install-form-login,
+body.standalone #t3-install-form-login .t3-install-form-submit,
+body.standalone #t3-install-box-body {
+	margin-bottom: 0;
+}
+
+body.standalone #t3-install-form-login .t3-install-form-submit {
+	padding-bottom: 1em;
+}
+
+body.standalone h1 {
+	background: url('../../../Images/Background/Logo.gif') no-repeat scroll 0 0 transparent;
+	text-indent:-999em;
+	margin: 2em 0 3.7em 0;
+	height: 34px;
+	width: 19em;
+	float: left;
+}
+
+body.standalone h2 {
+	padding: 3.3em 0 3.7em 17.5em;
+	margin: 0;
+	height: auto;
+	color: #ffffff;
+}
+
+body.standalone #t3-install-box-border-top {
+	height: 3px;
+	background: #3e3e3e url('../../../Images/Background/ContentTop.png') no-repeat center bottom;
+}
+
+body.standalone #t3-install-box-body {
+	background-color: #eeeeee;
+}
+
+body.standalone #t3-install-box-border-bottom {
+	height: 3px;
+	background: #4d4c4d url('../../../Images/Background/ContentBottom.png') no-repeat center top;
+}
+
+body.standalone #t3-install-menu,
+body.standalone #t3-install-box-body {
+	border: 0;
+}
+
+body.standalone #t3-install-menu-border-top {
+	width: 17.6em;
+	height: 3px;
+	background: #3e3e3e url('../../../Images/Background/ContentTop.png') no-repeat center bottom;
+}
+
+body.standalone #t3-install-menu {
+	background: #ebebeb url('../../../Images/Background/Menu.gif') repeat-x left bottom;
+}
+
+body.standalone #t3-install-menu-bottom {
+	width: 17.6em;
+	height: 3px;
+	background: #3e3e3e url('../../../Images/Background/ContentBottom.png') no-repeat center bottom;
+}
+
+body.standalone .t3-install-login h2 {
+	clear: both;
+	margin: 0;
+	padding: 0.5em 0 0.5em 3.35em;
+}
diff --git a/typo3/sysext/install/Resources/Public/Stylesheets/install_login.css b/typo3/sysext/install/Resources/Public/Stylesheets/Action/Common/Login.css
similarity index 87%
rename from typo3/sysext/install/Resources/Public/Stylesheets/install_login.css
rename to typo3/sysext/install/Resources/Public/Stylesheets/Action/Common/Login.css
index c3f3e0d8eca2..45d4259b589a 100644
--- a/typo3/sysext/install/Resources/Public/Stylesheets/install_login.css
+++ b/typo3/sysext/install/Resources/Public/Stylesheets/Action/Common/Login.css
@@ -20,7 +20,7 @@ h1,
 }
 
 .t3-install-login h2 {
-	background: url('../Images/login-icon-key.gif') no-repeat scroll 1em center #585858;
+	background: url('../../../Images/Icon/LoginIconKey.gif') no-repeat scroll 1em center #585858;
 	color: #ffffff;
 	font-size: 120%;
 	padding:0.5em 0 0.5em 3.35em;
diff --git a/typo3/sysext/install/Resources/Public/Stylesheets/general.css b/typo3/sysext/install/Resources/Public/Stylesheets/Action/Step/General.css
similarity index 59%
rename from typo3/sysext/install/Resources/Public/Stylesheets/general.css
rename to typo3/sysext/install/Resources/Public/Stylesheets/Action/Step/General.css
index ddbda497bbad..ec7c53ac0330 100644
--- a/typo3/sysext/install/Resources/Public/Stylesheets/general.css
+++ b/typo3/sysext/install/Resources/Public/Stylesheets/Action/Step/General.css
@@ -1,5 +1,63 @@
 @charset "UTF-8";
 
+/* http://meyerweb.com/eric/tools/css/reset/ */
+/* v1.0 | 20080212 */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend
+table, caption, tbody, tfoot, thead, tr, th, td {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	font-size: 100%;
+	vertical-align: baseline;
+	background: transparent;
+}
+
+body {
+	line-height: 1;
+}
+
+ol, ul {
+	list-style: none;
+}
+
+blockquote, q {
+	quotes: none;
+}
+
+blockquote:before, blockquote:after,
+q:before, q:after {
+	content: none;
+}
+
+/* remember to define focus styles! */
+:focus {
+	outline: 0;
+}
+
+/* remember to highlight inserts somehow! */
+ins {
+	text-decoration: none;
+}
+
+del {
+	text-decoration: line-through;
+}
+
+/* tables still need 'cellspacing="0"' in the markup */
+table {
+	border-collapse: collapse;
+	border-spacing: 0;
+}
+
 /* Font size 62.8% = 1em = 10px */
 body {
 	font: 62.8% Verdana, Arial, Helvetica, sans-serif;
@@ -138,7 +196,6 @@ fieldset.t3-install-form-submit {
 fieldset select,
 input.t3-install-form-input-text,
 textarea {
-	background: url('../Images/input-background.gif') repeat-x scroll 0 0 #FFFFFF;
 	border: 1px solid #7c7c7c;
 	color: #000000;
 	font-size: 1.1em;
@@ -158,23 +215,17 @@ input.t3-install-form-input-text {
 	padding: 0.1em 0.1em 0 0.45em;
 }
 
-textarea {
-	width: 99%;
-	font-size: 1.2em;
-}
-
 button {
 	color: #606060;
 	font-size: 1.1em;
 	padding: 0.3em 0.6em;
 	border: 1px solid #7c7c7c;
-	background: #f6f6f6 url('../Images/button-background.jpg') repeat-x left bottom;
+	background: #f6f6f6 url('../../../Images/Background/Button.jpg') repeat-x left bottom;
 	cursor: pointer;
 }
 
 button:hover {
-	background-color: #ededed;
-	background-image: url('../Images/button-background-hover.jpg');
+	background: #ededed url('../../../Images/Background/ButtonHover.jpg');
 }
 
 button span {
@@ -187,15 +238,11 @@ button span {
 }
 
 button span.t3-install-form-button-icon-negative {
-	background-image: url('../../../../../gfx/error.png');
+	background-image: url('../../../Images/Icon/Error.png');
 }
 
 button span.t3-install-form-button-icon-positive {
-	background-image: url('../../../../../gfx/ok.png');
-}
-
-.t3-install-hidden {
-	display: none;
+	background-image: url('../../../Images/Icon/Ok.png');
 }
 
 .t3-install-strong {
@@ -207,120 +254,11 @@ button span.t3-install-form-button-icon-positive {
 	margin: 1em auto;
 }
 
-#t3-install-left {
-	float: left;
-	width: 19em;
-	clear: both;
-}
-
 #t3-install-right {
 	padding-left: 19em;
 	width: 57em;
 }
 
-#t3-install-menu {
-	margin: 0;
-	padding: 0;
-	list-style: none;
-	width: 16em;
-	font-size: 110%;
-	line-height: 2em;
-}
-
-#t3-install-menu li {
-	padding: 0.35em 0 0.35em 2.8em;
-}
-
-#t3-install-menu li.act {
-	background-color: #585858;
-	line-height: 1.5em;
-}
-
-#t3-install-menu a {
-	color: #606060;
-	text-decoration: none;
-}
-
-#t3-install-menu a:hover {
-	color: #111;
-}
-
-#t3-install-menu li.act a {
-	font-weight: bold;
-	color: #ffffff;
-}
-
-#t3-install-menu li {
-	background-repeat: no-repeat;
-	background-position: 0.7em center;
-}
-
-#t3-install-menu #t3-install-menu-config {
-	background-image: url('../Images/menuConfig.png');
-}
-
-#t3-install-menu #t3-install-menu-systemEnvironment {
-	background-image: url('../Images/menuSystemEnvironment.png');
-}
-
-#t3-install-menu #t3-install-menu-database {
-	background-image: url('../Images/menuDatabase.png');
-}
-
-#t3-install-menu #t3-install-menu-update {
-	background-image: url('../Images/menuUpdate.png');
-}
-
-#t3-install-menu #t3-install-menu-images {
-	background-image: url('../Images/menuImages.png');
-}
-
-#t3-install-menu #t3-install-menu-extConfig {
-	background-image: url('../Images/menuExtConfig.png');
-}
-
-#t3-install-menu #t3-install-menu-typo3temp {
-	background-image: url('../Images/menuTypo3temp.png');
-}
-
-#t3-install-menu #t3-install-menu-cleanup {
-	background-image: url('../Images/menuCleanup.png');
-}
-
-#t3-install-menu #t3-install-menu-phpinfo {
-	background-image: url('../Images/menuPhpinfo.png');
-}
-
-#t3-install-menu #t3-install-menu-typo3conf_edit {
-	background-image: url('../Images/menuTypo3confEdit.png');
-}
-
-#t3-install-menu #t3-install-menu-about {
-	background-image: url('../Images/menuAbout.png');
-}
-
-#t3-install-menu #t3-install-menu-logout {
-	background-image: url('../Images/login-icon-key.gif');
-}
-
-#t3-install-links {
-	margin: 2em 0 0 0.8em;
-	padding: 0;
-	list-style: none;
-	width: 15.2em;
-	font-size: 110%;
-	line-height: 2em;
-}
-
-#t3-install-links a {
-	color: #797878;
-	text-decoration: none;
-}
-
-#t3-install-links a:hover {
-	text-decoration: underline;
-}
-
 #t3-install-box-body {
 	font-size: 110%;
 	line-height: 1.7em;
@@ -349,8 +287,6 @@ button span.t3-install-form-button-icon-positive {
 	color: #111 !important;
 }
 
-
-
 .typo3-message {
 	padding: 0.6em 0.6em 0.6em 2.6em;
 	background-repeat: no-repeat;
@@ -364,31 +300,31 @@ button span.t3-install-form-button-icon-positive {
 }
 
 .message-notice {
-	background-image: url("../../../../../gfx/notice.png");
+	background-image: url("../../../Images/Icon/Notice.png");
 	background-color: #f6f7fa;
 	border-color: #c2cbcf;
 }
 
 .message-information {
-	background-image: url("../../../../../gfx/information.png");
+	background-image: url("../../../Images/Icon/Information.png");
 	background-color: #ddeef9;
 	border-color: #8aafc4;
 }
 
 .message-ok {
-	background-image: url("../../../../../gfx/ok.png");
+	background-image: url("../../../Images/Icon/Ok.png");
 	background-color: #cdeaca;
 	border-color: #58b548;
 }
 
 .message-warning {
-	background-image: url("../../../../../gfx/warning.png");
+	background-image: url("../../../Images/Icon/Warning.png");
 	background-color: #fbffb3;
 	border-color: #c4b70d;
 }
 
 .message-error {
-	background-image: url("../../../../../gfx/error.png");
+	background-image: url("../../../Images/Icon/Error.png");
 	background-color: #fbb19b;
 	border-color: #dc4c42;
 }
@@ -403,3 +339,74 @@ button span.t3-install-form-button-icon-positive {
 #t3-install-copyright a {
 	color: #797878;
 }
+
+/* IE7 only styles */
+
+
+/* Font size 62.8% = 1em = 10px */
+body {
+	background: #4f4f4f url('../../../Images/Background/Body.jpg') repeat-x fixed;
+}
+
+#t3-install-outer {
+	width: 43em;
+	margin-left: 16em;
+}
+
+h1 {
+	background: url('../../../Images/Background/Logo.gif') no-repeat scroll 0 0 transparent;
+	margin: 2em 0 3.7em 0;
+	height: 34px;
+}
+
+h2 {
+	background-color: #585858;
+	font-size: 120%;
+	font-weight: bold;
+	color: #ffffff;
+	padding: 0.5em 1.8em 0.5em 1.8em;
+	margin: 0;
+}
+
+h3 {
+	font-size: 163%;
+}
+
+#t3-install-box-border-top {
+	height: 3px;
+	background: #3e3e3e url('../../../Images/Background/ContentTop.png') no-repeat center bottom;
+}
+
+#t3-install-box-border-bottom {
+	height: 3px;
+	background: #4d4c4d url('../../../Images/Background/ContentBottom.png') no-repeat center top;
+}
+
+#t3-install-box-body {
+	color: #787878;
+	background: #ebebeb url('../../../Images/Background/Content.jpg') repeat-x left bottom;
+	padding: 1em 1.8em 1em;
+}
+
+#stepInstaller-databaseSelect label {
+	float: none;
+	font-weight: bold;
+}
+
+#stepInstaller-databaseSelect p {
+	margin: 0 0 0.5em;
+}
+
+#stepInstaller-databaseSelect ul {
+	list-style: none;
+}
+
+#stepInstaller-databaseSelect ul li div {
+	display: inline-block;
+	margin-bottom: 10px;
+	width: 90%;
+}
+
+#stepInstaller-databaseSelect ul li input.radio {
+	vertical-align: top;
+}
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Public/Stylesheets/BackendModule/ShowEnableInstallToolButton.css b/typo3/sysext/install/Resources/Public/Stylesheets/BackendModule/ShowEnableInstallToolButton.css
new file mode 100644
index 000000000000..36ce454f0bc1
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/Stylesheets/BackendModule/ShowEnableInstallToolButton.css
@@ -0,0 +1,33 @@
+#container {
+	margin: 11em auto 0;
+	width: 41em;
+	line-height: 1.7em;
+}
+
+.typo3-message h2 {
+	color: #9E7D4A;
+	font-size: 16px;
+}
+
+span.t3-install-form-button-icon-positive {
+	background: url("../../Images/Icon/Ok.png") no-repeat scroll 0 0 transparent;
+	display: inline-block;
+	float: none;
+	height: 16px;
+	margin-left: 0.6em;
+	width: 16px;
+}
+
+form#t3-install-form-unlock button {
+	background: url("../../Images/Background/Button.jpg") repeat-x scroll left bottom #F6F6F6;
+	border: 1px solid #7C7C7C;
+	color: #606060;
+	cursor: pointer;
+	font-size: 1.1em;
+	padding: 0.3em 0.6em;
+	margin-top: 1em;
+}
+
+form#t3-install-form-unlock button:hover {
+	background: #EDEDED url("../../Images/Background/ButtonHover.jpg");
+}
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Public/Stylesheets/ie7.css b/typo3/sysext/install/Resources/Public/Stylesheets/ie7.css
deleted file mode 100644
index e27cfcb54a81..000000000000
--- a/typo3/sysext/install/Resources/Public/Stylesheets/ie7.css
+++ /dev/null
@@ -1,12 +0,0 @@
-@charset "UTF-8";
-
-/* IE7 only styles */
-
-/* fix position of right hand section */
-#t3-install-right {
-	padding-left: 0px !important;
-}
-/* fix background image in menu */
-#t3-install-menu li {
-	height: 1%;
-}
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Public/Stylesheets/install.css b/typo3/sysext/install/Resources/Public/Stylesheets/install.css
deleted file mode 100644
index a3316add60eb..000000000000
--- a/typo3/sysext/install/Resources/Public/Stylesheets/install.css
+++ /dev/null
@@ -1,479 +0,0 @@
-@charset "UTF-8";
-
-body {
-	background-color: #f2f2f2;
-}
-
-h1,
-#t3-install-menu-border-top,
-#t3-install-menu-bottom,
-#t3-install-links,
-#t3-install-box-border-top,
-#t3-install-box-border-bottom,
-#t3-install-copyright {
-	display: none;
-}
-
-#t3-install-box-body,
-#t3-install-menu {
-	border: 1px #dcdcdc solid;
-	background-color: #ffffff;
-}
-
-/* 0: Login form */
-
-/* 1: Basic configuration */
-#t3-install-checkimagemagick label {
-	width: 27em;
-}
-
-#systemInformation dt {
-	float: left;
-	width: 11em;
-}
-
-#systemInformation dd {
-	padding-left: 11em;
-	font-weight: bold;
-}
-
-#t3-install-imagemagickversions td {
-	padding-right: 1em;
-}
-
-/* 2: Database Analyzer */
-#t3-install-databasemenu {
-	width: 100%;
-}
-
-#t3-install-databaseconnected dt,
-#t3-install-checkthedatabaseexplanation dt {
-	float: left;
-	width: 7em;
-}
-
-#t3-install-databaseconnected dd,
-#t3-install-checkthedatabaseexplanation dd {
-	padding-left: 7em;
-}
-
-#t3-install-databaseconnected dd,
-#t3-install-checkthedatabaseexplanation dt {
-	font-weight: bold;
-}
-
-#t3-install-checkthedatabaseimport label span,
-#t3-install-checkthedatabasecache label span {
-	float: none;
-	display: inline-block;
-	vertical-align: top;
-}
-
-#t3-install-checkthedatabaseimport label span {
-	width: 32%;
-}
-
-#t3-install-checkthedatabasecache label span.t3-install-column1 {
-	width: 27%;
-}
-
-#t3-install-checkthedatabasecache label span.t3-install-column3 {
-	width: 56%;
-}
-
-#t3-install-checkthedatabasecache label span.t3-install-column2 {
-	width: 15%;
-}
-
-.t3-install-displayfields,
-.t3-install-displaysuggestions,
-.t3-install-displayfieldscompare {
-	width: 100%;
-	margin-bottom: 1em;
-}
-
-.t3-install-displayfields th,
-.t3-install-displaysuggestions th,
-.t3-install-displayfieldscompare th {
-	text-align: left;
-	background-color: #B3B7BD;
-}
-
-.t3-install-displaysuggestions .tfootHeader {
-	font-weight: bold;
-	background-color: #d0d0d0;
-}
-
-.t3-install-displayfields th,
-.t3-install-displayfields td,
-.t3-install-displaysuggestions th,
-.t3-install-displaysuggestions td,
-.t3-install-displayfieldscompare th,
-.t3-install-displayfieldscompare td {
-	padding: 0.2em;
-}
-
-.t3-install-displayfields thead,
-.t3-install-displayfields tbody,
-.t3-install-displaysuggestions thead,
-.t3-install-displaysuggestions tfoot,
-.t3-install-displaysuggestions tbody,
-.t3-install-displayfieldscompare thead,
-.t3-install-displayfieldscompare tbody {
-	border: 1px #B3B7BD solid;
-}
-
-.t3-install-displayfields .t3-install-column1,
-.t3-install-displaysuggestions .t3-install-column1 {
-	width: 35%;
-}
-
-.t3-install-displaysuggestions tr {
-	border-top: 1px #B3B7BD solid;
-}
-
-.t3-install-displaysuggestions pre {
-	font-size: 110%;
-}
-
-.t3-install-displayfieldscompare .warning {
-	color: red;
-}
-
-/* 4: Image processing */
-#t3-install-imageprocessingim dt,
-#t3-install-imageprocessingother dt,
-#t3-install-imageprocessingfileformats dt {
-	float: left;
-	width: 19em;
-}
-
-#t3-install-imageprocessingim dd,
-#t3-install-imageprocessingother dd,
-#t3-install-imageprocessingfileformats dd {
-	font-weight: bold;
-	padding-left: 19em;
-}
-
-#t3-install-imageprocessingim dd span,
-#t3-install-imageprocessingother dd span,
-#t3-install-imageprocessingfileformats dd span {
-	font-weight: normal;
-}
-
-.t3-install-displaytwinimagetextarea {
-	width: 48em;
-	overflow: scroll;
-	border: 1px #797878 solid;
-}
-
-.t3-install-displaytwinimagetextarea textarea {
-	width: 300em;
-	border: 0;
-}
-
-.t3-install-displaytwinimageimages,
-.t3-install-displaytwinimagereference,
-.t3-install-displaytwinimagedifferentfilesize {
-	width: 100%;
-	margin: 0.3em 0;
-}
-
-.t3-install-displaytwinimageimages td,
-.t3-install-displaytwinimagereference th,
-.t3-install-displaytwinimagereference td,
-.t3-install-displaytwinimagedifferentfilesize th,
-.t3-install-displaytwinimagedifferentfilesize td {
-	text-align: center;
-}
-
-/* 5: All configuration */
-.t3-install-description {
-	word-wrap: break-word;
-	width: 48em;
-}
-
-/* 6: typo3temp/ */
-#t3-install-tempmanagernumbers dt {
-	float: left;
-	width: 19em;
-}
-
-#t3-install-tempmanagernumbers dd {
-	font-weight: bold;
-	padding-left: 19em;
-}
-
-#t3-install-tempmanagernumbers dd span {
-	font-weight: normal;
-}
-
-/* 7: Clean up database */
-#t3-install-cleanupmanagernumbers dt {
-	float: left;
-	width: 19em;
-}
-
-#t3-install-cleanupmanagernumbers dd {
-	font-weight: bold;
-	padding-left: 19em;
-}
-
-#t3-install-cleanupmanagernumbers dd span {
-	font-weight: normal;
-}
-
-/* 8: phpinfo() */
-#t3-install-debuginformation {
-	width: 48em;
-	height: 20em;
-	overflow: scroll;
-	border: 1px #797878 solid;
-}
-
-#t3-install-debuginformation textarea {
-	width: 200em;
-	height: 68em;
-	border: 0;
-}
-
-.t3-install-viewarray {
-	border: 1px solid #B3B7BD;
-	border-bottom: 0;
-}
-
-.t3-install-viewarray .t3-install-viewarray {
-	border: 0;
-}
-
-.t3-install-viewarray dt {
-	float: left;
-	width: 19em;
-	font-weight: bold;
-}
-
-.t3-install-viewarray dd {
-	padding-left: 19em;
-	border-bottom: 1px #d0d0d0 solid
-}
-
-.t3-install-viewarray .t3-install-viewarray dt {
-	width: 10em;
-}
-
-.t3-install-viewarray .t3-install-viewarray dd {
-	padding-left: 10em;
-	border: 0;
-}
-
-.t3-install-viewarray dl {
-	margin: 0;
-}
-
-.phpinfo pre {
-	margin: 0px;
-	font-family: monospace;
-}
-
-.phpinfo table {
-	border-collapse: collapse;
-	width: 100%;
-	table-layout: fixed;
-}
-
-.phpinfo .center table {
-	margin-left: auto;
-	margin-right: auto;
-	text-align: left;
-}
-
-.phpinfo .center th {
-	text-align: center !important;
-}
-
-.phpinfo td,
-.phpinfo th {
-	border: 1px solid #000000;
-	vertical-align: baseline;
-	padding: 0.3em;
-	overflow: hidden;
-}
-
-body.standalone .phpinfo h1, .phpinfo h1 {
-	font-size: 150%;
-	background-image: none;
-	text-indent: 0;
-	height: auto;
-	color: #000000;
-	margin: 1em 0 1em 0;
-	text-align: center;
-	float: none;
-	display: block;
-}
-
-.phpinfo h2 {
-	margin: 1em 0 1em 0;
-	color: #000000;
-	padding: 0;
-	text-align: center;
-	background-color: transparent;
-	float: none;
-}
-
-.phpinfo .p {
-	text-align: left;
-}
-
-.phpinfo .e {
-	background-color: #ccf;
-	font-weight: bold;
-	color: #000000;
-}
-
-.phpinfo .h {
-	background-color: #99c;
-	font-weight: bold;
-	color: #000000;
-}
-
-.phpinfo .v {
-	background-color: #ccc;
-	color: #000000;
-}
-
-.phpinfo .vr {
-	background-color: #ccc;
-	text-align: right;
-	color: #000000;
-}
-
-.phpinfo img {
-	float: right;
-	border: 0px;
-}
-
-.phpinfo hr {
-	background-color: #ccc;
-	border: 0px;
-	height: 1px;
-	color: #000000;
-}
-
-/* 9: Edit files in typo3conf/ */
-#t3-install-confeditfilelist dt {
-	float: left;
-	width: 44em;
-}
-
-#t3-install-confeditfilelist dd {
-	margin-left: 44em;
-}
-
-#t3-install-confeditfilelist dt a {
-	color: blue;
-	text-decoration: none;
-}
-
-#t3-install-confeditfilelist dt a:hover {
-	text-decoration: underline;
-}
-
-#t3-install-confeditfilelist dt.act a {
-	font-weight: bold;
-}
-
-#t3-install-fileedit textarea {
-	height: 10em;
-	width: 99%;
-	padding: 0;
-}
-
-/* 10: About */
-
-
-/* Stylesheet for the standalone version of the Install Tool */
-
-body.standalone {
-	background: #4f4f4f url('../Images/body-background.jpg') repeat-x fixed;
-}
-
-body.standalone #t3-install-outer {
-	margin: 0 auto;
-}
-
-body.standalone h1,
-body.standalone #t3-install-menu-border-top,
-body.standalone #t3-install-menu-bottom,
-body.standalone #t3-install-links,
-body.standalone #t3-install-box-border-top,
-body.standalone #t3-install-box-border-bottom,
-body.standalone #t3-install-copyright {
-	display: block;
-}
-
-body.standalone #t3-install-form-login,
-body.standalone #t3-install-form-login .t3-install-form-submit,
-body.standalone #t3-install-box-body {
-	margin-bottom: 0;
-}
-
-body.standalone #t3-install-form-login .t3-install-form-submit {
-	padding-bottom: 1em;
-}
-
-body.standalone h1 {
-	background: url('../Images/logo.gif') no-repeat scroll 0 0 transparent;
-	text-indent:-999em;
-	margin: 2em 0 3.7em 0;
-	height: 34px;
-	width: 19em;
-	float: left;
-}
-
-body.standalone h2 {
-	padding: 3.3em 0 3.7em 17.5em;
-	margin: 0;
-	height: auto;
-	color: #ffffff;
-}
-
-body.standalone #t3-install-box-border-top {
-	height: 3px;
-	background: #3e3e3e url('../Images/content-top.png') no-repeat center bottom;
-}
-
-body.standalone #t3-install-box-body {
-	background-color: #eeeeee;
-}
-
-body.standalone #t3-install-box-border-bottom {
-	height: 3px;
-	background: #4d4c4d url('../Images/content-bottom.png') no-repeat center top;
-}
-
-body.standalone #t3-install-menu,
-body.standalone #t3-install-box-body {
-	border: 0;
-}
-
-body.standalone #t3-install-menu-border-top {
-	width: 17.6em;
-	height: 3px;
-	background: #3e3e3e url('../Images/content-top.png') no-repeat center bottom;
-}
-
-body.standalone #t3-install-menu {
-	background: #ebebeb url('../Images/menuBackground.gif') repeat-x left bottom;
-}
-
-body.standalone #t3-install-menu-bottom {
-	width: 17.6em;
-	height: 3px;
-	background: #3e3e3e url('../Images/content-bottom.png') no-repeat center bottom;
-}
-
-body.standalone .t3-install-login h2 {
-	clear: both;
-	margin: 0;
-	padding: 0.5em 0 0.5em 3.35em;
-}
diff --git a/typo3/sysext/install/Resources/Public/Stylesheets/install_123.css b/typo3/sysext/install/Resources/Public/Stylesheets/install_123.css
deleted file mode 100644
index 5a03666e0206..000000000000
--- a/typo3/sysext/install/Resources/Public/Stylesheets/install_123.css
+++ /dev/null
@@ -1,215 +0,0 @@
-@charset "UTF-8";
-
-/* Font size 62.8% = 1em = 10px */
-body {
-	background: #4f4f4f url('../Images/body-background.jpg') repeat-x fixed;
-}
-
-#t3-install-outer {
-	width: 43em;
-	margin-left: 16em;
-}
-
-h1 {
-	background: url('../Images/logo.gif') no-repeat scroll 0 0 transparent;
-	text-indent:-999em;
-	margin: 2em 0 3.7em 0;
-	height: 34px;
-}
-
-h2 {
-	background-color: #585858;
-	font-size: 120%;
-	font-weight: bold;
-	color: #ffffff;
-	padding: 0.5em 1.8em 0.5em 1.8em;
-	margin: 0;
-}
-
-h3 {
-	font-size: 163%;
-}
-
-#t3-install-box-border-top {
-	height: 3px;
-	background: #3e3e3e url('../Images/content-top.png') no-repeat center bottom;
-}
-
-#t3-install-box-border-bottom {
-	height: 3px;
-	background: #4d4c4d url('../Images/content-bottom.png') no-repeat center top;
-}
-
-#t3-install-box-body {
-	color: #787878;
-	background: #ebebeb url('../Images/content-background.jpg') repeat-x left bottom;
-	padding: 1em 1.8em 1em;
-}
-
-/* 1-2-3 General */
-#t3-install-123-stepheader {
-	list-style: none;
-	margin: 1em 0 0;
-	padding: 0;
-}
-
-#t3-install-123-stepheader li {
-	float: left;
-	text-indent:-999em;
-	width: 35px;
-	height: 35px;
-	margin-right: 1.1em;
-	background: url('../Images/numbers.png') no-repeat scroll 0 0 transparent;
-}
-
-#t3-install-123-stepheader li a {
-	width: 100%;
-	height: 100%;
-	display: block;
-}
-
-#t3-install-123-stepheader li.step1 {
-	background-position: 0 0;
-}
-
-#t3-install-123-stepheader li.step1.act {
-	background-position: 0 center;
-}
-
-#t3-install-123-stepheader li.step1.done {
-	background-position: 0 bottom;
-}
-
-#t3-install-123-stepheader li.step2 {
-	background-position: -35px 0;
-}
-
-#t3-install-123-stepheader li.step2.act {
-	background-position: -35px center;
-}
-
-#t3-install-123-stepheader li.step2.done {
-	background-position: -35px bottom;
-}
-
-#t3-install-123-stepheader li.step3 {
-	background-position: -70px 0;
-}
-
-#t3-install-123-stepheader li.step3.act {
-	background-position: -70px center;
-}
-
-#t3-install-123-stepheader li.step3.done {
-	background-position: -70px bottom;
-}
-
-#t3-install-123-stepheader li.step4 {
-	background-position: -105px 0;
-}
-
-#t3-install-123-stepheader li.step4.act {
-	background-position: -105px center;
-}
-
-#t3-install-123-stepheader li.step4.done {
-	background-position: -105px bottom;
-}
-
-#t3-install-123-stepheader li.step5 {
-	background-position: -140px 0;
-}
-
-#t3-install-123-stepheader li.step5.act {
-	background-position: -140px center;
-}
-
-#t3-install-123-stepheader li.step5.done {
-	background-position: -140px bottom;
-}
-
-#t3-install-123-stepheader li.step6 {
-	background-position: -175px 0;
-}
-
-#t3-install-123-stepheader li.step6.act {
-	background-position: -175px center;
-}
-
-#t3-install-123-stepheader li.step6.done {
-	background-position: -175px bottom;
-}
-
-#t3-install-123-stepheader li.step7 {
-	background-position: -210px 0;
-}
-
-#t3-install-123-stepheader li.step7.act {
-	background-position: -210px center;
-}
-
-#t3-install-123-stepheader li.step7.done {
-	background-position: -210px bottom;
-}
-
-#t3-install-123-stepheader li.step8 {
-	background-position: -245px 0;
-}
-
-#t3-install-123-stepheader li.step8.act {
-	background-position: -245px center;
-}
-
-#t3-install-123-stepheader li.step8.done {
-	background-position: -245px bottom;
-}
-
-#t3-install-123-skip {
-	text-align: right;
-	font-size: 0.91em;
-}
-
-#t3-install-123-skip a {
-	color: #888888;
-	text-decoration: none;
-}
-
-#t3-install-123-skip a:hover {
-	text-decoration: underline;
-}
-
-/* 1-2-3: Step 3 */
-#t3-install-123-step3 label {
-	float: none;
-	font-weight: bold;
-}
-
-#t3-install-123-step3 p {
-	margin: 0 0 0.5em;
-}
-
-/* 1-2-3: Step 4 */
-#t3-install-123-stepoutputsummary dt {
-	float: left;
-	clear: both;
-	width: 15em;
-	margin-right: 1em;
-}
-
-#t3-install-123-stepoutputsummary dd {
-	float: left;
-}
-
-#t3-install-123-step3 ul {
-	list-style: none;
-}
-
-#t3-install-123-step3 ul li div {
-	display: inline-block;
-	margin-bottom: 10px;
-	width: 90%;
-}
-
-#t3-install-123-step3 ul li input.radio {
-	vertical-align: top;
-}
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Public/Stylesheets/reset.css b/typo3/sysext/install/Resources/Public/Stylesheets/reset.css
deleted file mode 100644
index 12329e4b6267..000000000000
--- a/typo3/sysext/install/Resources/Public/Stylesheets/reset.css
+++ /dev/null
@@ -1,55 +0,0 @@
-@charset "UTF-8";
-
-/* http://meyerweb.com/eric/tools/css/reset/ */
-/* v1.0 | 20080212 */
-
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, font, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend
-table, caption, tbody, tfoot, thead, tr, th, td {
-	margin: 0;
-	padding: 0;
-	border: 0;
-	outline: 0;
-	font-size: 100%;
-	vertical-align: baseline;
-	background: transparent;
-}
-body {
-	line-height: 1;
-}
-ol, ul {
-	list-style: none;
-}
-blockquote, q {
-	quotes: none;
-}
-blockquote:before, blockquote:after,
-q:before, q:after {
-	content: '';
-	content: none;
-}
-
-/* remember to define focus styles! */
-:focus {
-	outline: 0;
-}
-
-/* remember to highlight inserts somehow! */
-ins {
-	text-decoration: none;
-}
-del {
-	text-decoration: line-through;
-}
-
-/* tables still need 'cellspacing="0"' in the markup */
-table {
-	border-collapse: collapse;
-	border-spacing: 0;
-}
\ No newline at end of file
diff --git a/typo3/sysext/install/Start/Install.php b/typo3/sysext/install/Start/Install.php
new file mode 100644
index 000000000000..f3b7b8f1321e
--- /dev/null
+++ b/typo3/sysext/install/Start/Install.php
@@ -0,0 +1,126 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Entry point to the install tool and step installer.
+ *
+ * There are two main controllers: "step" and "tool".
+ * The step controller is always called first, and redirects to the tool controller
+ * if the basic core functionality is given (instance configuration exists, database
+ * connection works, ...)
+ * The tool controller is the main "install tool" with all the main functionality.
+ *
+ * The step controller handles the basic installation.
+ * During first installation it creates the basic file and folder structure, the
+ * configuration files, the database connection and a basic configuration. Those steps
+ * are cycled through and if some step returns TRUE on "needsExecution", an input
+ * form of this step is rendered.
+ * After initial installation, the step installer is still called if the install
+ * tool is accessed, so it will automatically come up if some basic configuration fails.
+ * If everything is ok, the step installer will redirect to the main install tool.
+ * The step installer also has some "silent" update scripts, for example it migrates
+ * a localconf.php to LocalConfiguration if needed.
+ *
+ * This ensures as soon as the tool controller is called, the basic configuration is ok.
+ *
+ * Whenever the bootstrap or other core elements figure the installation
+ * needs an update that is handled within the step controller, it should just
+ * redirect to the entry script and let the step controller do necessary work.
+ *
+ * The step installer initiates browser redirects if steps were executed. This simplifies
+ * internal logic by separating the different bootstrap states needed during installation
+ * from each other.
+ *
+ * There is also a backend module controller, that basically only shows a screen
+ * with the "enable install tool" button and then redirects to the entry script. Other
+ * than that, it does not interfere with step or tool controller and just sets a
+ * context GET parameter to indicate that the install tool is called within backend context.
+ *
+ * To coordinate different tasks within step and install controller and actions, several
+ * GET or POST parameters are used, all prefixed with "install".
+ * Parameters allowed as GET and POST are preserved during redirects, POST parameters are
+ * thrown away between redirects (HTTP status code 303).
+ *
+ * The following main GET and POST parameters are used:
+ * - GET/POST "install[context]" Preserved
+ *   Either empty, 'standalone' or 'backend', fallback to 'standalone'. Set to 'backend'
+ *   if install tool is called form the backend main module (BackendModuleController). This
+ *   changes the view a bit and shows the doc header in the install tool, changes background
+ *   color and such.
+ *
+ * - GET/POST "install[controller]" Preserved
+ *   Either empty, 'step' or 'tool', fallback to 'step'. This coordinates whether the step
+ *   or tool controller is called. This parameter is never set externally, so the step
+ *   controller is always called first. It itself sets the type to 'tool' and redirects to
+ *   the tool controller if needed.
+ *   This means you could (but shouldn't) directly call the tool controller, but it
+ *   will still require a login and session, then.
+ *
+ * - GET/POST "install[action]" Preserved
+ *   Determine step and tool controller main action sanitized by step / tool controller and
+ *   only executed if user is logged in. Form protection API relies on this.
+ *
+ * - POST "install[set]"
+ *   Contains keys to determine which sub-action of the action is requested,
+ *   eg. "change install tool password" in "important actions". Set to 'execute' if some
+ *   step should be executed.
+ *
+ * - POST "install[values]"
+ *   Data values for a specific "install[set]" action
+ *
+ * - POST "install[token]"
+ *   A session and instance specific token created from the instance specific
+ *   encryptionKey (taken care of in an early point in the step controller). This hash
+ *   is used as form protection against CSRF for all POST data. Both the step and tool
+ *   controller will logout a user if the token check fails. The only exception to this
+ *   handling is the very first installation step where no session and no encryption key
+ *   can exist yet.
+ */
+
+define('TYPO3_MODE', 'BE');
+define('TYPO3_enterInstallScript', '1');
+
+// Bootstrap bare minimum: class loader, LocalConfiguration, but no extensions and such
+require '../../core/Classes/Core/Bootstrap.php';
+\TYPO3\CMS\Core\Core\Bootstrap::getInstance()
+	->baseSetup('typo3/sysext/install/Start/')
+	->startOutputBuffering()
+	->loadConfigurationAndInitialize(FALSE);
+
+// Execute 'tool' or 'step' controller depending on install[controller] GET/POST parameter
+$getPost = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('install');
+if (isset($getPost['controller']) && $getPost['controller'] === 'tool') {
+	$controller = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
+		'TYPO3\\CMS\\Install\\Controller\\ToolController'
+	);
+} else {
+	$controller = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
+		'TYPO3\CMS\install\Controller\StepController'
+	);
+}
+$controller->execute();
+?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Tests/Unit/FolderStructure/AbstractNodeTest.php b/typo3/sysext/install/Tests/Unit/FolderStructure/AbstractNodeTest.php
new file mode 100644
index 000000000000..2e8f99b0b0ef
--- /dev/null
+++ b/typo3/sysext/install/Tests/Unit/FolderStructure/AbstractNodeTest.php
@@ -0,0 +1,370 @@
+<?php
+namespace TYPO3\CMS\Install\Tests\Unit\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Test case
+ */
+class AbstractNodeTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
+
+	/**
+	 * @var array Directories or files in typo3temp/ created during tests to delete afterwards
+	 */
+	protected $testNodesToDelete = array();
+
+	/**
+	 * Tear down
+	 */
+	public function tearDown() {
+		foreach($this->testNodesToDelete as $node) {
+			if (\TYPO3\CMS\Core\Utility\GeneralUtility::isFirstPartOfStr($node, PATH_site . 'typo3temp/')) {
+				\TYPO3\CMS\Core\Utility\GeneralUtility::rmdir($node, TRUE);
+			}
+		}
+	}
+
+	/**
+	 * @test
+	 */
+	public function getNameReturnsSetName() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('dummy'), array(), '', FALSE);
+		$name = uniqid('name_');
+		$node->_set('name', $name);
+		$this->assertSame($name, $node->getName());
+	}
+
+	/**
+	 * @test
+	 */
+	public function getTargetPermissionReturnsSetTargetPermission() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('dummy'), array(), '', FALSE);
+		$permission = '1234';
+		$node->_set('targetPermission', $permission);
+		$this->assertSame($permission, $node->getTargetPermission());
+	}
+
+	/**
+	 * @test
+	 */
+	public function getChildrenReturnsSetChildren() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('dummy'), array(), '', FALSE);
+		$children = array('1234');
+		$node->_set('children', $children);
+		$this->assertSame($children, $node->getChildren());
+	}
+
+	/**
+	 * @test
+	 */
+	public function getParentReturnsSetParent() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('dummy'), array(), '', FALSE);
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\RootNodeInterface', array(), array(), '', FALSE);
+		$node->_set('parent', $parent);
+		$this->assertSame($parent, $node->getParent());
+	}
+
+	/**
+	 * @test
+	 */
+	public function getAbsolutePathCallsParentForPathAndAppendsOwnName() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('dummy'), array(), '', FALSE);
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\RootNodeInterface', array(), array(), '', FALSE);
+		$parentPath = '/foo/bar';
+		$parent->expects($this->once())->method('getAbsolutePath')->will($this->returnValue($parentPath));
+		$name = uniqid('test_');
+		$node->_set('parent', $parent);
+		$node->_set('name', $name);
+		$this->assertSame($parentPath . '/' . $name, $node->getAbsolutePath());
+	}
+
+	/**
+	 * @test
+	 */
+	public function isWritableCallsParentIsWritable() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('dummy'), array(), '', FALSE);
+		$parentMock = $this->getMock('TYPO3\\CMS\\Install\\FolderStructure\\NodeInterface', array(), array(), '', FALSE);
+		$parentMock->expects($this->once())->method('isWritable');
+		$node->_set('parent', $parentMock);
+		$node->isWritable();
+	}
+
+	/**
+	 * @test
+	 */
+	public function isWritableReturnsWritableStatusOfParent() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('dummy'), array(), '', FALSE);
+		$parentMock = $this->getMock('TYPO3\\CMS\\Install\\FolderStructure\\NodeInterface', array(), array(), '', FALSE);
+		$parentMock->expects($this->once())->method('isWritable')->will($this->returnValue(TRUE));
+		$node->_set('parent', $parentMock);
+		$this->assertTrue($node->isWritable());
+	}
+
+	/**
+	 * @test
+	 */
+	public function existsReturnsTrueIfNodeExists() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		\TYPO3\CMS\Core\Utility\GeneralUtility::mkdir_deep($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$this->assertTrue($node->_call('exists'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function existsReturnsTrueIfIsLinkAndTargetIsDead() {
+		if (TYPO3_OS === 'WIN') {
+			$this->markTestSkipped('Test not available on Windows OS.');
+		}
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('link_');
+		$target = PATH_site . 'typo3temp/' . uniqid('notExists_');
+		symlink($target, $path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$this->assertTrue($node->_call('exists'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function existsReturnsFalseIfNodeNotExists() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$this->assertFalse($node->_call('exists'));
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception
+	 */
+	public function fixPermissionThrowsExceptionIfPermissionAreAlreadyCorrect() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode',
+			array('isPermissionCorrect', 'getAbsolutePath'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue(''));
+		$node->expects($this->once())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->_call('fixPermission');
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixPermissionReturnsErrorStatusIfPermissionCanNotBeChanged() {
+		if (TYPO3_OS === 'WIN') {
+			$this->markTestSkipped('Test not available on Windows OS.');
+		}
+		if (function_exists('posix_getegid') && posix_getegid() === 0) {
+			$this->markTestSkipped('Test skipped if run on linux as root');
+		}
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode',
+			array('isPermissionCorrect', 'getRelativePathBelowSiteRoot', 'getAbsolutePath'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('getRelativePathBelowSiteRoot')->will($this->returnValue(''));
+		$node->expects($this->once())->method('isPermissionCorrect')->will($this->returnValue(FALSE));
+		$path = PATH_site . 'typo3temp/' . uniqid('root_');
+		mkdir($path);
+		$subPath = $path . '/' . uniqid('dir_');
+		mkdir($subPath);
+		chmod($path, octdec(2000));
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($subPath));
+		$node->_set('targetPermission', '2770');
+		$this->assertInstanceOf('TYPO3\\CMS\\Install\\Status\\ErrorStatus', $node->_call('fixPermission'));
+		chmod($path, octdec(2770));
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixPermissionReturnsOkStatusIfPermissionCanBeFixedAndSetsPermissionToCorrectValue() {
+		if (TYPO3_OS === 'WIN') {
+			$this->markTestSkipped('Test not available on Windows OS.');
+		}
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode',
+			array('isPermissionCorrect', 'getRelativePathBelowSiteRoot', 'getAbsolutePath'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('getRelativePathBelowSiteRoot')->will($this->returnValue(''));
+		$node->expects($this->once())->method('isPermissionCorrect')->will($this->returnValue(FALSE));
+		$path = PATH_site . 'typo3temp/' . uniqid('root_');
+		mkdir($path);
+		$subPath = $path . '/' . uniqid('dir_');
+		mkdir($subPath);
+		chmod($path, octdec(2770));
+		$this->testNodesToDelete[] = $path;
+		$node->_set('targetPermission', '2775');
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($subPath));
+		$this->assertInstanceOf('TYPO3\\CMS\\Install\\Status\\OkStatus', $node->_call('fixPermission'));
+		$resultDirectoryPermissions = substr(decoct(fileperms($subPath)), 1);
+		$this->assertSame('2775', $resultDirectoryPermissions);
+	}
+
+	/**
+	 * @test
+	 */
+	public function isPermissionCorrectReturnsTrueOnWindowsOs() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('isWindowsOs'), array(), '', FALSE);
+		$node->expects($this->once())->method('isWindowsOs')->will($this->returnValue(TRUE));
+		$this->assertTrue($node->_call('isPermissionCorrect'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function isPermissionCorrectReturnsTrueIfTargetPermissionAndCurrentPermissionAreIdentical() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('isWindowsOs', 'getCurrentPermission'), array(), '', FALSE);
+		$node->expects($this->any())->method('isWindowsOs')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('getCurrentPermission')->will($this->returnValue('foo'));
+		$node->_set('targetPermission', 'foo');
+		$this->assertTrue($node->_call('isPermissionCorrect'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function isPermissionCorrectReturnsFalseIfTargetPermissionAndCurrentPermissionAreNotIdentical() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('isWindowsOs', 'getCurrentPermission'), array(), '', FALSE);
+		$node->expects($this->any())->method('isWindowsOs')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('getCurrentPermission')->will($this->returnValue('foo'));
+		$node->_set('targetPermission', 'bar');
+		$this->assertFalse($node->_call('isPermissionCorrect'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function getCurrentPermissionReturnsCurrentDirectoryPermission() {
+		if (TYPO3_OS === 'WIN') {
+			$this->markTestSkipped('Test not available on Windows OS.');
+		}
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		\TYPO3\CMS\Core\Utility\GeneralUtility::mkdir_deep($path);
+		$this->testNodesToDelete[] = $path;
+		chmod($path, octdec(2775));
+		clearstatcache();
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$this->assertSame('2775', $node->_call('getCurrentPermission'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function getCurrentPermissionReturnsCurrentFilePermission() {
+		if (TYPO3_OS === 'WIN') {
+			$this->markTestSkipped('Test not available on Windows OS.');
+		}
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('getAbsolutePath'), array(), '', FALSE);
+		$file = PATH_site . 'typo3temp/' . uniqid('file_');
+		touch($file);
+		$this->testNodesToDelete[] = $file;
+		chmod($file, octdec(770));
+		clearstatcache();
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($file));
+		$this->assertSame('0770', $node->_call('getCurrentPermission'));
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException
+	 */
+	public function getRelativePathBelowSiteRootThrowsExceptionIfGivenPathIsNotBelowPathSiteConstant() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('dummy'), array(), '', FALSE);
+		$node->_call('getRelativePathBelowSiteRoot', '/tmp');
+	}
+
+	/**
+	 * @test
+	 */
+	public function getRelativePathCallsGetAbsolutePathIfPathIsNull() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode',
+			array('getAbsolutePath'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->once())->method('getAbsolutePath')->will($this->returnValue(PATH_site));
+		$node->_call('getRelativePathBelowSiteRoot', NULL);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getRelativePathBelowSiteRootReturnsSingleForwardSlashIfGivenPathEqualsPathSiteConstant() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('dummy'), array(), '', FALSE);
+		$result = $node->_call('getRelativePathBelowSiteRoot', PATH_site);
+		$this->assertSame('/', $result);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getRelativePathBelowSiteRootReturnsSubPath() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\AbstractNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\AbstractNode', array('dummy'), array(), '', FALSE);
+		$result = $node->_call('getRelativePathBelowSiteRoot', PATH_site . 'foo/bar');
+		$this->assertSame('/foo/bar', $result);
+	}
+}
diff --git a/typo3/sysext/install/Tests/Unit/FolderStructure/DefaultFactoryTest.php b/typo3/sysext/install/Tests/Unit/FolderStructure/DefaultFactoryTest.php
new file mode 100644
index 000000000000..546b39f3c513
--- /dev/null
+++ b/typo3/sysext/install/Tests/Unit/FolderStructure/DefaultFactoryTest.php
@@ -0,0 +1,39 @@
+<?php
+namespace TYPO3\CMS\Install\Tests\Unit\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Test case
+ */
+class DefaultFactoryTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
+
+	/**
+	 * @test
+	 */
+	public function getStructureReturnsInstanceOfStructureFacadeInterface() {
+		$object = new \TYPO3\CMS\Install\FolderStructure\DefaultFactory();
+		$this->assertInstanceOf('TYPO3\\CMS\\Install\\FolderStructure\\StructureFacadeInterface', $object->getStructure());
+	}
+}
diff --git a/typo3/sysext/install/Tests/Unit/FolderStructure/DirectoryNodeTest.php b/typo3/sysext/install/Tests/Unit/FolderStructure/DirectoryNodeTest.php
new file mode 100644
index 000000000000..558255447201
--- /dev/null
+++ b/typo3/sysext/install/Tests/Unit/FolderStructure/DirectoryNodeTest.php
@@ -0,0 +1,663 @@
+<?php
+namespace TYPO3\CMS\Install\Tests\Unit\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Test case
+ */
+class DirectoryNodeTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
+
+	/**
+	 * @var array Directories or files in typo3temp/ created during tests to delete afterwards
+	 */
+	protected $testNodesToDelete = array();
+
+	/**
+	 * Tear down
+	 */
+	public function tearDown() {
+		foreach ($this->testNodesToDelete as $node) {
+			if (\TYPO3\CMS\Core\Utility\GeneralUtility::isFirstPartOfStr($node, PATH_site . 'typo3temp/')) {
+				\TYPO3\CMS\Core\Utility\GeneralUtility::rmdir($node, TRUE);
+			}
+		}
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException
+	 */
+	public function constructorThrowsExceptionIfParentIsNull() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('dummy'), array(), '', FALSE);
+		$node->__construct(array(), NULL);
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException
+	 */
+	public function constructorThrowsExceptionIfNameContainsForwardSlash() {
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\NodeInterface', array(), array(), '', FALSE);
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('dummy'), array(), '', FALSE);
+		$structure = array(
+			'name' => 'foo/bar',
+		);
+		$node->__construct($structure, $parent);
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructorCallsCreateChildrenIfChildrenAreSet() {
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\NodeInterface', array(), array(), '', FALSE);
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('createChildren'),
+			array(),
+			'',
+			FALSE
+		);
+		$childArray = array(
+			'foo',
+		);
+		$structure = array(
+			'name' => 'foo',
+			'children' => $childArray,
+		);
+		$node->expects($this->once())->method('createChildren')->with($childArray);
+		$node->__construct($structure, $parent);
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructorSetsParent() {
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\NodeInterface', array(), array(), '', FALSE);
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('dummy'), array(), '', FALSE);
+		$structure = array(
+			'name' => 'foo',
+		);
+		$node->__construct($structure, $parent);
+		$this->assertSame($parent, $node->getParent());
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructorSetsTargetPermission() {
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\NodeInterface', array(), array(), '', FALSE);
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('dummy'), array(), '', FALSE);
+		$targetPermission = '2550';
+		$structure = array(
+			'name' => 'foo',
+			'targetPermission' => $targetPermission,
+		);
+		$node->__construct($structure, $parent);
+		$this->assertSame($targetPermission, $node->getTargetPermission());
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructorSetsName() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('dummy'), array(), '', FALSE);
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\RootNodeInterface', array(), array(), '', FALSE);
+		$name = uniqid('test_');
+		$node->__construct(array('name' => $name), $parent);
+		$this->assertSame($name, $node->getName());
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArray() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('getAbsolutePath', 'exists', 'isDirectory', 'isWritable', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$this->assertInternalType('array', $node->getStatus());
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithWarningStatusIfDirectoryNotExists() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('getAbsolutePath', 'exists', 'isDirectory', 'isWritable', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\WarningStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithErrorStatusIfNodeIsNotADirectory() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('getAbsolutePath', 'exists', 'isDirectory', 'isWritable', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		touch ($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\ErrorStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithWarningStatusIfDirectoryExistsButIsNotWritable() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('getAbsolutePath', 'exists', 'isDirectory', 'isWritable', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		touch ($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(FALSE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\WarningStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithWarningStatusIfDirectoryExistsButPermissionAreNotCorrect() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('getAbsolutePath', 'exists', 'isDirectory', 'isWritable', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		touch ($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\WarningStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithOkStatusIfDirectoryExistsAndPermissionAreCorrect() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('getAbsolutePath', 'exists', 'isDirectory', 'isWritable', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		touch ($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\OkStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusCallsGetStatusOnChildren() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('exists', 'isDirectory', 'isPermissionCorrect', 'getRelativePathBelowSiteRoot', 'isWritable'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$childMock1 = $this->getMock('TYPO3\\CMS\\Install\\FolderStructure\\NodeInterface', array(), array(), '', FALSE);
+		$childMock1->expects($this->once())->method('getStatus')->will($this->returnValue(array()));
+		$childMock2 = $this->getMock('TYPO3\\CMS\\Install\\FolderStructure\\NodeInterface', array(), array(), '', FALSE);
+		$childMock2->expects($this->once())->method('getStatus')->will($this->returnValue(array()));
+		$node->_set('children', array($childMock1, $childMock2));
+		$node->getStatus();
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithOwnStatusAndStatusOfChild() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('exists', 'isDirectory', 'isPermissionCorrect', 'getRelativePathBelowSiteRoot', 'isWritable'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$childMock = $this->getMock('TYPO3\\CMS\\Install\\FolderStructure\\NodeInterface', array(), array(), '', FALSE);
+		$childStatusMock = $this->getMock('TYPO3\\CMS\\Install\\Status\\ErrorStatus', array(), array(), '', FALSE);
+		$childMock->expects($this->once())->method('getStatus')->will($this->returnValue(array($childStatusMock)));
+		$node->_set('children', array($childMock));
+		$status = $node->getStatus();
+		$statusOfDirectory = $status[0];
+		$statusOfChild = $status[1];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\OkStatus', $statusOfDirectory);
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\ErrorStatus', $statusOfChild);
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixCallsFixSelfAndReturnsItsResult() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('fixSelf'),
+			array(),
+			'',
+			FALSE
+		);
+		$uniqueReturn = array(uniqid('foo_'));
+		$node->expects($this->once())->method('fixSelf')->will($this->returnValue($uniqueReturn));
+		$this->assertSame($uniqueReturn, $node->fix());
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixCallsFixOnChildrenAndReturnsMergedResult() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('fixSelf'), array(), '', FALSE);
+		$uniqueReturnSelf = uniqid('foo_');
+		$node->expects($this->once())->method('fixSelf')->will($this->returnValue(array($uniqueReturnSelf)));
+
+		$childMock1 = $this->getMock('TYPO3\\CMS\\Install\\FolderStructure\\NodeInterface', array(), array(), '', FALSE);
+		$uniqueReturnChild1 = uniqid('foo_');
+		$childMock1->expects($this->once())->method('fix')->will($this->returnValue(array($uniqueReturnChild1)));
+
+		$childMock2 = $this->getMock('TYPO3\\CMS\\Install\\FolderStructure\\NodeInterface', array(), array(), '', FALSE);
+		$uniqueReturnChild2 = uniqid('foo_');
+		$childMock2->expects($this->once())->method('fix')->will($this->returnValue(array($uniqueReturnChild2)));
+
+		$node->_set('children', array($childMock1, $childMock2));
+
+		$this->assertSame(array($uniqueReturnSelf, $uniqueReturnChild1, $uniqueReturnChild2), $node->fix());
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixSelfCallsCreateDirectoryIfDirectoryDoesNotExistAndReturnsResult() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('exists', 'createDirectory', 'getAbsolutePath', 'isDirectory', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->once())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$uniqueReturn = uniqid();
+		$node->expects($this->once())->method('createDirectory')->will($this->returnValue($uniqueReturn));
+		$this->assertSame(array($uniqueReturn), $node->_call('fixSelf'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixSelfReturnsErrorStatusIfNodeExistsButIsNotADirectoryAndReturnsResult() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('exists', 'createDirectory', 'getAbsolutePath', 'isDirectory', 'isPermissionCorrect', 'fixPermission'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(FALSE));
+		$uniqueReturn = uniqid();
+		$node->expects($this->once())->method('fixPermission')->will($this->returnValue($uniqueReturn));
+		$this->assertSame(array($uniqueReturn), $node->_call('fixSelf'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixSelfCallsFixPermissionIfDirectoryExistsButPermissionAreWrong() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('exists', 'createDirectory', 'getAbsolutePath', 'isDirectory', 'isPermissionCorrect', 'getRelativePathBelowSiteRoot'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->once())->method('isDirectory')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$resultArray = $node->_call('fixSelf');
+		$this->assertInstanceOf('TYPO3\\CMS\Install\\Status\\StatusInterface', $resultArray[0]);
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixSelfReturnsArrayOfStatusMessages() {
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode',
+			array('exists', 'isDirectory', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$this->assertInternalType('array', $node->_call('fixSelf'));
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception
+	 */
+	public function createDirectoryThrowsExceptionIfNodeExists() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('exists', 'getAbsolutePath'), array(), '', FALSE);
+		$node->expects($this->once())->method('getAbsolutePath')->will($this->returnValue(''));
+		$node->expects($this->once())->method('exists')->will($this->returnValue(TRUE));
+		$node->_call('createDirectory');
+	}
+
+	/**
+	 * @test
+	 */
+	public function createDirectoryCreatesDirectory() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('exists', 'getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->once())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->_call('createDirectory');
+		$this->assertTrue(is_dir($path));
+	}
+
+	/**
+	 * @test
+	 */
+	public function createDirectoryReturnsOkStatusIfDirectoryWasCreated() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('exists', 'getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->once())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$this->assertInstanceOf('TYPO3\\CMS\Install\\Status\\StatusInterface', $node->_call('createDirectory'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function createDirectoryReturnsErrorStatusIfDirectoryWasNotCreated() {
+		if (TYPO3_OS === 'WIN') {
+			$this->markTestSkipped('Test not available on Windows OS.');
+		}
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('exists', 'getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('root_');
+		mkdir($path);
+		chmod($path, octdec(2550));
+		$subPath = $path . '/' . uniqid('dir_');
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->once())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($subPath));
+		$this->assertInstanceOf('TYPO3\\CMS\Install\\Status\\StatusInterface', $node->_call('createDirectory'));
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException
+	 */
+	public function createChildrenThrowsExceptionIfAChildTypeIsNotSet() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('dummy'), array(), '', FALSE);
+		$brokenStructure = array(
+			array(
+				'name' => 'foo',
+			),
+		);
+		$node->_call('createChildren', $brokenStructure);
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException
+	 */
+	public function createChildrenThrowsExceptionIfAChildNameIsNotSet() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('dummy'), array(), '', FALSE);
+		$brokenStructure = array(
+			array(
+				'type' => 'foo',
+			),
+		);
+		$node->_call('createChildren', $brokenStructure);
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException
+	 */
+	public function createChildrenThrowsExceptionForMultipleChildrenWithSameName() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('dummy'), array(), '', FALSE);
+		$brokenStructure = array(
+			array(
+				'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+				'name' => 'foo',
+			),
+			array(
+				'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+				'name' => 'foo',
+			),
+		);
+		$node->_call('createChildren', $brokenStructure);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getChildrenReturnsCreatedChild() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('dummy'), array(), '', FALSE);
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\NodeInterface', array(), array(), '', FALSE);
+		$childName = uniqid('test_');
+		$structure = array(
+			'name' => 'foo',
+			'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+			'children' => array(
+				array(
+					'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+					'name' => $childName,
+				),
+			),
+		);
+		$node->__construct($structure, $parent);
+		$children = $node->getChildren();
+		/** @var $child \TYPO3\CMS\Install\FolderStructure\NodeInterface */
+		$child = $children[0];
+		$this->assertInstanceOf('TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode', $children[0]);
+		$this->assertSame($childName, $child->getName());
+	}
+
+	/**
+	 * @test
+	 */
+	public function isWritableReturnsFalseIfNodeDoesNotExist() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$this->assertFalse($node->isWritable());
+	}
+
+	/**
+	 * @test
+	 */
+	public function isWritableReturnsTrueIfNodeExistsAndFileCanBeCreated() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('root_');
+		\TYPO3\CMS\Core\Utility\GeneralUtility::mkdir_deep($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$this->assertTrue($node->isWritable());
+	}
+
+	/**
+	 * @test
+	 */
+	public function isWritableReturnsFalseIfNodeExistsButFileCanNotBeCreated() {
+		if (TYPO3_OS === 'WIN') {
+			$this->markTestSkipped('Test not available on Windows OS.');
+		}
+		if (function_exists('posix_getegid') && posix_getegid() === 0) {
+			$this->markTestSkipped('Test skipped if run on linux as root');
+		}
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('root_');
+		\TYPO3\CMS\Core\Utility\GeneralUtility::mkdir_deep($path);
+		$this->testNodesToDelete[] = $path;
+		chmod($path, octdec(2550));
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$this->assertFalse($node->isWritable());
+	}
+
+	/**
+	 * @test
+	 */
+	public function isDirectoryReturnsTrueIfNameIsADirectory() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		\TYPO3\CMS\Core\Utility\GeneralUtility::mkdir_deep($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$this->assertTrue($node->_call('isDirectory'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function isDirectoryReturnsFalseIfNameIsALinkToADirectory() {
+		if (TYPO3_OS === 'WIN') {
+			$this->markTestSkipped('Test not available on Windows OS.');
+		}
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\DirectoryNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('root_');
+		\TYPO3\CMS\Core\Utility\GeneralUtility::mkdir_deep($path);
+		$this->testNodesToDelete[] = $path;
+		$link = uniqid('link_');
+		$dir = uniqid('dir_');
+		mkdir($path . '/' . $dir);
+		symlink($path . '/' . $dir, $path . '/' . $link);
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path . '/' . $link));
+		$this->assertFalse($node->_call('isDirectory'));
+	}
+}
diff --git a/typo3/sysext/install/Tests/Unit/FolderStructure/FileNodeTest.php b/typo3/sysext/install/Tests/Unit/FolderStructure/FileNodeTest.php
new file mode 100644
index 000000000000..a25490538d26
--- /dev/null
+++ b/typo3/sysext/install/Tests/Unit/FolderStructure/FileNodeTest.php
@@ -0,0 +1,725 @@
+<?php
+namespace TYPO3\CMS\Install\Tests\Unit\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Test case
+ */
+class FileNodeTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
+
+	/**
+	 * @var array Directories or files in typo3temp/ created during tests to delete afterwards
+	 */
+	protected $testNodesToDelete = array();
+
+	/**
+	 * Tear down
+	 */
+	public function tearDown() {
+		foreach ($this->testNodesToDelete as $node) {
+			if (\TYPO3\CMS\Core\Utility\GeneralUtility::isFirstPartOfStr($node, PATH_site . 'typo3temp/')) {
+				\TYPO3\CMS\Core\Utility\GeneralUtility::rmdir($node, TRUE);
+			}
+		}
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException
+	 */
+	public function constructorThrowsExceptionIfParentIsNull() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('dummy'), array(), '', FALSE);
+		$node->__construct(array(), NULL);
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException
+	 */
+	public function constructorThrowsExceptionIfNameContainsForwardSlash() {
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\NodeInterface', array(), array(), '', FALSE);
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('dummy'), array(), '', FALSE);
+		$structure = array(
+			'name' => 'foo/bar',
+		);
+		$node->__construct($structure, $parent);
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructorSetsParent() {
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\NodeInterface', array(), array(), '', FALSE);
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('dummy'), array(), '', FALSE);
+		$structure = array(
+			'name' => 'foo',
+		);
+		$node->__construct($structure, $parent);
+		$this->assertSame($parent, $node->getParent());
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructorSetsTargetPermission() {
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\NodeInterface', array(), array(), '', FALSE);
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('dummy'), array(), '', FALSE);
+		$targetPermission = '660';
+		$structure = array(
+			'name' => 'foo',
+			'targetPermission' => $targetPermission,
+		);
+		$node->__construct($structure, $parent);
+		$this->assertSame($targetPermission, $node->getTargetPermission());
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructorSetsName() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('dummy'), array(), '', FALSE);
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\RootNodeInterface', array(), array(), '', FALSE);
+		$name = uniqid('test_');
+		$node->__construct(array('name' => $name), $parent);
+		$this->assertSame($name, $node->getName());
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructorSetsTargetContent() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('dummy'), array(), '', FALSE);
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\RootNodeInterface', array(), array(), '', FALSE);
+		$targetContent = uniqid('content_');
+		$structure = array(
+			'name' => 'foo',
+			'targetContent' => $targetContent,
+		);
+		$node->__construct($structure, $parent);
+		$this->assertSame($targetContent, $node->_get('targetContent'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function targetContentIsNullIfNotGiven() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('dummy'), array(), '', FALSE);
+		$parent = $this->getMock('TYPO3\CMS\Install\FolderStructure\RootNodeInterface', array(), array(), '', FALSE);
+		$structure = array(
+			'name' => 'foo',
+		);
+		$node->__construct($structure, $parent);
+		$this->assertNull($node->_get('targetContent'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArray() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('getAbsolutePath', 'exists', 'isFile', 'isWritable', 'isPermissionCorrect', 'isContentCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isContentCorrect')->will($this->returnValue(TRUE));
+		$this->assertInternalType('array', $node->getStatus());
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithWarningStatusIFileNotExists() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('getAbsolutePath', 'exists', 'isFile', 'isWritable', 'isPermissionCorrect', 'isContentCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isContentCorrect')->will($this->returnValue(TRUE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\WarningStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithErrorStatusIfNodeIsNotAFile() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('getAbsolutePath', 'exists', 'isFile', 'isWritable', 'isPermissionCorrect', 'isContentCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		touch ($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isContentCorrect')->will($this->returnValue(TRUE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\ErrorStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithWarningStatusIfFileExistsButIsNotWritable() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('getAbsolutePath', 'exists', 'isFile', 'isWritable', 'isPermissionCorrect', 'isContentCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		touch ($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isContentCorrect')->will($this->returnValue(TRUE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\WarningStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithWarningStatusIfFileExistsButPermissionAreNotCorrect() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('getAbsolutePath', 'exists', 'isFile', 'isWritable', 'isPermissionCorrect', 'isContentCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		touch ($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isContentCorrect')->will($this->returnValue(TRUE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\WarningStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithErrorStatusIfFileExistsButContentIsNotCorrect() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('getAbsolutePath', 'exists', 'isFile', 'isWritable', 'isPermissionCorrect', 'isContentCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		touch ($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isContentCorrect')->will($this->returnValue(FALSE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\ErrorStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithOkStatusIfFileExistsAndPermissionAreCorrect() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('getAbsolutePath', 'exists', 'isFile', 'isWritable', 'isPermissionCorrect', 'isContentCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		touch ($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isContentCorrect')->will($this->returnValue(TRUE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\OkStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixCallsFixSelfAndReturnsItsResult() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('fixSelf'),
+			array(),
+			'',
+			FALSE
+		);
+		$uniqueReturn = array(uniqid('foo_'));
+		$node->expects($this->once())->method('fixSelf')->will($this->returnValue($uniqueReturn));
+		$this->assertSame($uniqueReturn, $node->fix());
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixSelfCallsCreateFileIfFileDoesNotExistAndReturnsResult() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('exists', 'createFile', 'setContent', 'getAbsolutePath', 'isFile', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$uniqueReturn = uniqid();
+		$node->expects($this->once())->method('createFile')->will($this->returnValue($uniqueReturn));
+		$actualReturn = $node->_call('fixSelf');
+		$actualReturn = $actualReturn[0];
+		$this->assertSame($uniqueReturn, $actualReturn);
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixSelfCallsSetsContentIfFileCreationWasSuccessfulAndTargetContentIsNotNullAndReturnsResult() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('exists', 'createFile', 'setContent', 'getAbsolutePath', 'isFile', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$uniqueReturn = uniqid();
+		$createFileStatus = $this->getMock('TYPO3\\CMS\\Install\\Status\\OkStatus', array(), array(), '', FALSE);
+		$node->expects($this->any())->method('createFile')->will($this->returnValue($createFileStatus));
+		$node->_set('targetContent', 'foo');
+		$node->expects($this->once())->method('setContent')->will($this->returnValue($uniqueReturn));
+		$actualReturn = $node->_call('fixSelf');
+		$actualReturn = $actualReturn[1];
+		$this->assertSame($uniqueReturn, $actualReturn);
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixSelfDoesNotCallSetContentIfFileCreationFailed() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('exists', 'createFile', 'setContent', 'getAbsolutePath', 'isFile', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$createFileStatus = $this->getMock('TYPO3\\CMS\\Install\\Status\\ErrorStatus', array(), array(), '', FALSE);
+		$node->expects($this->any())->method('createFile')->will($this->returnValue($createFileStatus));
+		$node->_set('targetContent', 'foo');
+		$node->expects($this->never())->method('setContent');
+		$node->_call('fixSelf');
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixSelfDoesNotCallSetContentIfFileTargetContentIsNull() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('exists', 'createFile', 'setContent', 'getAbsolutePath', 'isFile', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$createFileStatus = $this->getMock('TYPO3\\CMS\\Install\\Status\\OkStatus', array(), array(), '', FALSE);
+		$node->expects($this->any())->method('createFile')->will($this->returnValue($createFileStatus));
+		$node->_set('targetContent', NULL);
+		$node->expects($this->never())->method('setContent');
+		$node->_call('fixSelf');
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixSelfReturnsErrorStatusIfNodeExistsButIsNotAFileAndReturnsResult() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('exists', 'createFile', 'getAbsolutePath', 'isFile', 'isPermissionCorrect', 'fixPermission'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(FALSE));
+		$uniqueReturn = uniqid();
+		$node->expects($this->once())->method('fixPermission')->will($this->returnValue($uniqueReturn));
+		$this->assertSame(array($uniqueReturn), $node->_call('fixSelf'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixSelfCallsFixPermissionIfFileExistsButPermissionAreWrong() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('exists', 'createFile', 'getAbsolutePath', 'isFile', 'isPermissionCorrect', 'getRelativePathBelowSiteRoot'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->once())->method('isFile')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$resultArray = $node->_call('fixSelf');
+		$this->assertInstanceOf('TYPO3\\CMS\Install\\Status\\StatusInterface', $resultArray[0]);
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixSelfReturnsArrayOfStatusMessages() {
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\FileNode',
+			array('exists', 'isFile', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isFile')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$this->assertInternalType('array', $node->_call('fixSelf'));
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception
+	 */
+	public function createFileThrowsExceptionIfNodeExists() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('exists', 'getAbsolutePath'), array(), '', FALSE);
+		$node->expects($this->once())->method('getAbsolutePath')->will($this->returnValue(''));
+		$node->expects($this->once())->method('exists')->will($this->returnValue(TRUE));
+		$node->_call('createFile');
+	}
+
+	/**
+	 * @test
+	 */
+	public function createFileReturnsOkStatusIfFileWasCreated() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('exists', 'getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('file_');
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->once())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$this->assertInstanceOf('TYPO3\\CMS\Install\\Status\\StatusInterface', $node->_call('createFile'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function createFileCreatesFile() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('exists', 'getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('file_');
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->once())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->_call('createFile');
+		$this->assertTrue(is_file($path));
+	}
+
+	/**
+	 * @test
+	 */
+	public function createFileReturnsErrorStatusIfFileWasNotCreated() {
+		if (TYPO3_OS === 'WIN') {
+			$this->markTestSkipped('Test not available on Windows OS.');
+		}
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('exists', 'getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('root_');
+		mkdir($path);
+		chmod($path, octdec(2550));
+		$subPath = $path . '/' . uniqid('file_');
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->once())->method('exists')->will($this->returnValue(FALSE));
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($subPath));
+		$this->assertInstanceOf('TYPO3\\CMS\Install\\Status\\StatusInterface', $node->_call('createFile'));
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception
+	 */
+	public function isContentCorrectThrowsExceptionIfTargetIsNotAFile() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		mkdir($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->_call('isContentCorrect');
+	}
+
+	/**
+	 * @test
+	 */
+	public function isContentCorrectReturnsTrueIfTargetContentPropertyIsNull() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('file_');
+		touch($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->_set('targetContent', NULL);
+		$this->assertTrue($node->_call('isContentCorrect'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function isContentCorrectReturnsTrueIfTargetContentEqualsCurrentContent() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('file_');
+		$content = uniqid('content_');
+		file_put_contents($path, $content);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->_set('targetContent', $content);
+		$this->assertTrue($node->_call('isContentCorrect'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function isContentCorrectReturnsFalseIfTargetContentNotEqualsCurrentContent() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('file_');
+		$content = uniqid('content1_');
+		$targetContent = uniqid('content2_');
+		file_put_contents($path, $content);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->_set('targetContent', $targetContent);
+		$this->assertFalse($node->_call('isContentCorrect'));
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception
+	 */
+	public function setContentThrowsExceptionIfTargetIsNotAFile() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		mkdir($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->_set('targetContent', 'foo');
+		$node->_call('setContent');
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception
+	 */
+	public function setContentThrowsExceptionIfTargetContentIsNull() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('file_');
+		touch($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->_set('targetContent', NULL);
+		$node->_call('setContent');
+	}
+
+	/**
+	 * @test
+	 */
+	public function setContentSetsContentToFile() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('getAbsolutePath', 'getRelativePathBelowSiteRoot'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('file_');
+		touch($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$targetContent = uniqid('content_');
+		$node->_set('targetContent', $targetContent);
+		$node->_call('setContent');
+		$resultContent = file_get_contents($path);
+		$this->assertSame($targetContent, $resultContent);
+	}
+
+	/**
+	 * @test
+	 */
+	public function setContentReturnsOkStatusIfContentWasSuccessfullySet() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('getAbsolutePath', 'getRelativePathBelowSiteRoot'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('file_');
+		touch($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$targetContent = uniqid('content_');
+		$node->_set('targetContent', $targetContent);
+		$this->assertInstanceOf('TYPO3\\CMS\\Install\\Status\\OkStatus', $node->_call('setContent'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function setContentReturnsErrorStatusIfContentCanNotBeSetSet() {
+		if (TYPO3_OS === 'WIN') {
+			$this->markTestSkipped('Test not available on Windows OS.');
+		}
+		if (function_exists('posix_getegid') && posix_getegid() === 0) {
+			$this->markTestSkipped('Test skipped if run on linux as root');
+		}
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('getAbsolutePath', 'getRelativePathBelowSiteRoot'), array(), '', FALSE);
+		$dir = PATH_site . 'typo3temp/' . uniqid('dir_');
+		mkdir($dir);
+		$file = $dir . '/' . uniqid('file_');
+		touch($file);
+		chmod($file, octdec(0440));
+		$this->testNodesToDelete[] = $dir;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($file));
+		$targetContent = uniqid('content_');
+		$node->_set('targetContent', $targetContent);
+		$this->assertInstanceOf('TYPO3\\CMS\\Install\\Status\\ErrorStatus', $node->_call('setContent'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function isFileReturnsTrueIfNameIsFile() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('file_');
+		touch($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$this->assertTrue($node->_call('isFile'));
+	}
+
+	/**
+	 * @test
+	 */
+	public function isFileReturnsFalseIfNameIsALinkFile() {
+		if (TYPO3_OS === 'WIN') {
+			$this->markTestSkipped('Test not available on Windows OS.');
+		}
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\FileNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\FileNode', array('getAbsolutePath'), array(), '', FALSE);
+		$path = PATH_site . 'typo3temp/' . uniqid('root_');
+		\TYPO3\CMS\Core\Utility\GeneralUtility::mkdir_deep($path);
+		$this->testNodesToDelete[] = $path;
+		$link = uniqid('link_');
+		$file = uniqid('file_');
+		touch($path . '/' . $file);
+		symlink($path . '/' . $file, $path . '/' . $link);
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path . '/' . $link));
+		$this->assertFalse($node->_call('isFile'));
+	}
+}
diff --git a/typo3/sysext/install/Tests/Unit/FolderStructure/RootNodeTest.php b/typo3/sysext/install/Tests/Unit/FolderStructure/RootNodeTest.php
new file mode 100644
index 000000000000..b12da46174a1
--- /dev/null
+++ b/typo3/sysext/install/Tests/Unit/FolderStructure/RootNodeTest.php
@@ -0,0 +1,264 @@
+<?php
+namespace TYPO3\CMS\Install\Tests\Unit\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Test case
+ */
+class RootNodeTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
+
+	/**
+	 * @var array Directories or files in typo3temp/ created during tests to delete afterwards
+	 */
+	protected $testNodesToDelete = array();
+
+	/**
+	 * Tear down
+	 */
+	public function tearDown() {
+		foreach ($this->testNodesToDelete as $node) {
+			if (\TYPO3\CMS\Core\Utility\GeneralUtility::isFirstPartOfStr($node, PATH_site . 'typo3temp/')) {
+				\TYPO3\CMS\Core\Utility\GeneralUtility::rmdir($node, TRUE);
+			}
+		}
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\RootNodeException
+	 */
+	public function constructorThrowsExceptionIfParentIsNotNull() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\RootNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\RootNode', array('isWindowsOs'), array(), '', FALSE);
+		$falseParent = $this->getMock(
+			'TYPO3\CMS\Install\FolderStructure\RootNodeInterface',
+			array(),
+			array(),
+			'',
+			FALSE
+		);
+		$node->__construct(array(), $falseParent);
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException
+	 */
+	public function constructorThrowsExceptionIfAbsolutePathIsNotSet() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\RootNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\RootNode', array('isWindowsOs'), array(), '', FALSE);
+		$structure = array(
+			'type' => 'root',
+		);
+		$node->__construct($structure, NULL);
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException
+	 */
+	public function constructorThrowsExceptionIfAbsolutePathIsNotAbsoluteOnWindows() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\RootNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\RootNode', array('isWindowsOs'), array(), '', FALSE);
+		$node
+			->expects($this->any())
+			->method('isWindowsOs')
+			->will($this->returnValue(TRUE));
+		$structure = array(
+			'name' => '/bar'
+		);
+		$node->__construct($structure, NULL);
+	}
+
+	/**
+	 * @test
+	 * @expectedException \TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException
+	 */
+	public function constructorThrowsExceptionIfAbsolutePathIsNotAbsoluteOnUnix() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\RootNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\RootNode', array('isWindowsOs'), array(), '', FALSE);
+		$node
+			->expects($this->any())
+			->method('isWindowsOs')
+			->will($this->returnValue(FALSE));
+		$structure = array(
+			'name' => 'C:/bar'
+		);
+		$node->__construct($structure, NULL);
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructorSetsParentToNull() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\RootNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\RootNode', array('isWindowsOs'), array(), '', FALSE);
+		$node
+			->expects($this->any())
+			->method('isWindowsOs')
+			->will($this->returnValue(FALSE));
+		$structure = array(
+			'name' => '/bar'
+		);
+		$node->__construct($structure, NULL);
+		$this->assertNull($node->getParent());
+	}
+
+	/**
+	 * @test
+	 */
+	public function getChildrenReturnsChildCreatedByConstructor() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\RootNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\RootNode', array('isWindowsOs'), array(), '', FALSE);
+		$node
+			->expects($this->any())
+			->method('isWindowsOs')
+			->will($this->returnValue(FALSE));
+		$childName = uniqid('test_');
+		$structure = array(
+			'name' => '/foo',
+			'children' => array(
+				array(
+					'type' => 'TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode',
+					'name' => $childName,
+				),
+			),
+		);
+		$node->__construct($structure, NULL);
+		$children = $node->getChildren();
+		/** @var $child \TYPO3\CMS\install\FolderStructure\NodeInterface */
+		$child = $children[0];
+		$this->assertInstanceOf('TYPO3\\CMS\\install\\FolderStructure\\DirectoryNode', $child);
+		$this->assertSame($childName, $child->getName());
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructorSetsTargetPermission() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\RootNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\RootNode', array('isWindowsOs'), array(), '', FALSE);
+		$node
+			->expects($this->any())
+			->method('isWindowsOs')
+			->will($this->returnValue(FALSE));
+		$targetPermission = '2550';
+		$structure = array(
+			'name' => '/foo',
+			'targetPermission' => $targetPermission,
+		);
+		$node->__construct($structure, NULL);
+		$this->assertSame($targetPermission, $node->getTargetPermission());
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructorSetsName() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\RootNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\RootNode', array('isWindowsOs'), array(), '', FALSE);
+		$node
+			->expects($this->any())
+			->method('isWindowsOs')
+			->will($this->returnValue(FALSE));
+		$name = '/' . uniqid('test_');
+		$node->__construct(array('name' => $name), NULL);
+		$this->assertSame($name, $node->getName());
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsArrayWithOkStatusAndCallsOwnStatusMethods() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\RootNode',
+			array('getAbsolutePath', 'exists', 'isDirectory', 'isWritable', 'isPermissionCorrect'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		touch ($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->once())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->once())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->once())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->once())->method('isWritable')->will($this->returnValue(TRUE));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$status = $statusArray[0];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\OkStatus', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getStatusCallsGetChildrenStatusForStatus() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\DirectoryNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock(
+			'TYPO3\\CMS\\Install\\FolderStructure\\RootNode',
+			array('getAbsolutePath', 'exists', 'isDirectory', 'isWritable', 'isPermissionCorrect', 'getChildrenStatus'),
+			array(),
+			'',
+			FALSE
+		);
+		$path = PATH_site . 'typo3temp/' . uniqid('dir_');
+		touch ($path);
+		$this->testNodesToDelete[] = $path;
+		$node->expects($this->any())->method('getAbsolutePath')->will($this->returnValue($path));
+		$node->expects($this->any())->method('exists')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isDirectory')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isPermissionCorrect')->will($this->returnValue(TRUE));
+		$node->expects($this->any())->method('isWritable')->will($this->returnValue(TRUE));
+		$childStatusMock = $this->getMock('TYPO3\\CMS\\Install\\Status\\ErrorStatus', array(), array(), '', FALSE);
+		$node->expects($this->once())->method('getChildrenStatus')->will($this->returnValue(array($childStatusMock)));
+		$statusArray = $node->getStatus();
+		/** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
+		$statusSelf = $statusArray[0];
+		$statusOfChild = $statusArray[1];
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\OkStatus', $statusSelf);
+		$this->assertInstanceOf('\TYPO3\CMS\Install\Status\ErrorStatus', $statusOfChild);
+	}
+
+	/**
+	 * @test
+	 */
+	public function getAbsolutePathReturnsGivenName() {
+		/** @var $node \TYPO3\CMS\Install\FolderStructure\RootNode|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$node = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\RootNode', array('isWindowsOs'), array(), '', FALSE);
+		$node
+			->expects($this->any())
+			->method('isWindowsOs')
+			->will($this->returnValue(FALSE));
+		$path = '/foo/bar';
+		$structure = array(
+			'name' => $path,
+		);
+		$node->__construct($structure, NULL);
+		$this->assertSame($path, $node->getAbsolutePath());
+	}
+}
diff --git a/typo3/sysext/install/Tests/Unit/FolderStructure/StructureFacadeTest.php b/typo3/sysext/install/Tests/Unit/FolderStructure/StructureFacadeTest.php
new file mode 100644
index 000000000000..fa980cadd13a
--- /dev/null
+++ b/typo3/sysext/install/Tests/Unit/FolderStructure/StructureFacadeTest.php
@@ -0,0 +1,57 @@
+<?php
+namespace TYPO3\CMS\Install\Tests\Unit\FolderStructure;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Test case
+ */
+class StructureFacadeTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
+
+	/**
+	 * @test
+	 */
+	public function getStatusReturnsStatusOfStructureAndReturnsItsResult() {
+		/** @var $facade \TYPO3\CMS\Install\FolderStructure\StructureFacade|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$facade = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\StructureFacade', array('dummy'), array(), '', FALSE);
+		$root = $this->getMock('TYPO3\\CMS\\Install\\FolderStructure\\RootNode', array(), array(), '', FALSE);
+		$root->expects($this->once())->method('getStatus')->will($this->returnValue(array()));
+		$facade->_set('structure', $root);
+		$status = $facade->getStatus();
+		$this->assertInternalType('array', $status);
+	}
+
+	/**
+	 * @test
+	 */
+	public function fixCallsFixOfStructureAndReturnsItsResult() {
+		/** @var $facade \TYPO3\CMS\Install\FolderStructure\StructureFacade|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\PHPUnit_Framework_MockObject_MockObject */
+		$facade = $this->getAccessibleMock('TYPO3\\CMS\\Install\\FolderStructure\\StructureFacade', array('dummy'), array(), '', FALSE);
+		$root = $this->getMock('TYPO3\\CMS\\Install\\FolderStructure\\RootNode', array(), array(), '', FALSE);
+		$root->expects($this->once())->method('fix')->will($this->returnValue(array()));
+		$facade->_set('structure', $root);
+		$status = $facade->fix();
+		$this->assertInternalType('array', $status);
+	}
+}
diff --git a/typo3/sysext/install/Tests/Unit/InstallToolTest.php b/typo3/sysext/install/Tests/Unit/InstallToolTest.php
deleted file mode 100644
index 9d6aaf72f620..000000000000
--- a/typo3/sysext/install/Tests/Unit/InstallToolTest.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Tests\Unit;
-
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2012-2013 Christian Kuhn <lolli@schwarzbu.ch>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-/**
- * Testcase for class "tx_install"
- *
- * @author Christian Kuhn <lolli@schwarzbu.ch>
- */
-class InstallToolTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
-
-	/**
-	 * @var boolean True, if a test set a different error handler
-	 */
-	protected $customErrorHandlerUsed = FALSE;
-
-	/**
-	 * Restore error handler if a different one was set during tests
-	 */
-	public function tearDown() {
-		if ($this->customErrorHandlerUsed === TRUE) {
-			restore_error_handler();
-		}
-	}
-
-	/**
-	 * @test
-	 */
-	public function generateConfigFormThrowsNoWarningHandlingContentOfTypo3ConfVarsExtensionAdded() {
-		$GLOBALS['TYPO3_CONF_VARS_extensionAdded'] = array();
-		// The '/r' triggers a warning if the content is not properly quoted in the regex
-		$GLOBALS['TYPO3_CONF_VARS_extensionAdded']['key1']['key2'] = 'FILE:EXT:rtehtmlarea/res';
-		$GLOBALS['TYPO3_CONF_VARS'] = array();
-		$GLOBALS['TYPO3_CONF_VARS']['key1']['key2'] = 'foo';
-		set_error_handler(array($this, 'errorHandlerCallback'), E_ALL & ~(E_STRICT | E_NOTICE));
-		$this->customErrorHandlerUsed = TRUE;
-		require_once PATH_site . 'typo3/sysext/install/mod/class.tx_install.php';
-		/** @var $instance \TYPO3\CMS\Install\Installer */
-		$instance = $this->getMock('TYPO3\\CMS\\Install\\Installer', array('otherMethod'), array('otherMethod'), '', FALSE);
-		$instance->generateConfigForm('get_form');
-	}
-
-	/**
-	 * Set as error handler in test
-	 * generateConfigFormThrowsNoWarningHandlingContentOfTypo3ConfVarsExtensionAdded
-	 *
-	 * @param $errorNumber
-	 * @throws \Exception
-	 */
-	public function errorHandlerCallback($errorNumber) {
-		throw new \Exception('Error thrown');
-	}
-
-}
-
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/Tests/Unit/SchemaMigratorTest.php b/typo3/sysext/install/Tests/Unit/Service/SqlSchemaMigrationServiceTest.php
similarity index 91%
rename from typo3/sysext/install/Tests/Unit/SchemaMigratorTest.php
rename to typo3/sysext/install/Tests/Unit/Service/SqlSchemaMigrationServiceTest.php
index a09c5558cab2..b4243fe6944e 100644
--- a/typo3/sysext/install/Tests/Unit/SchemaMigratorTest.php
+++ b/typo3/sysext/install/Tests/Unit/Service/SqlSchemaMigrationServiceTest.php
@@ -1,5 +1,5 @@
 <?php
-namespace TYPO3\CMS\Install\Tests\Unit;
+namespace TYPO3\CMS\Install\Tests\Unit\Service;
 
 /***************************************************************
  *  Copyright notice
@@ -27,17 +27,17 @@ namespace TYPO3\CMS\Install\Tests\Unit;
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-use TYPO3\CMS\Install\Sql\SchemaMigrator;
+use TYPO3\CMS\Install\Service\SqlSchemaMigrationService;
 
 /**
- * Testcase for class "\TYPO3\CMS\Install\Sql\SchemaMigrator"
+ * Test case
  *
  * @author Mario Rimann <mario.rimann@typo3.org>
  */
-class SchemaMigratorTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
+class SqlSchemaMigrationServiceTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
 
 	/**
-	 * @var \TYPO3\CMS\Install\Sql\SchemaMigrator
+	 * @var \TYPO3\CMS\Install\Service\SqlSchemaMigrationService
 	 */
 	protected $fixture;
 
@@ -45,7 +45,7 @@ class SchemaMigratorTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
 	 * Sets up the fixture for testing
 	 */
 	public function setUp() {
-		$this->fixture = new SchemaMigrator();
+		$this->fixture = new SqlSchemaMigrationService();
 	}
 
 	/**
diff --git a/typo3/sysext/install/Tests/Unit/Status/StatusUtilityTest.php b/typo3/sysext/install/Tests/Unit/Status/StatusUtilityTest.php
index a14ca102265a..fb79dbb37325 100644
--- a/typo3/sysext/install/Tests/Unit/Status/StatusUtilityTest.php
+++ b/typo3/sysext/install/Tests/Unit/Status/StatusUtilityTest.php
@@ -29,48 +29,6 @@ namespace TYPO3\CMS\Install\Tests\Unit\Status;
  */
 class StatusUtilityTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
 
-	/**
-	 * @test
-	 * @expectedException \TYPO3\CMS\Install\Status\Exception
-	 */
-	public function renderStatusObjectsAsHtmlThrowsExceptionIfObjectDoesNotImplementStatusInterface() {
-		$statusUtility = new \TYPO3\CMS\Install\Status\StatusUtility();
-		$statusUtility->renderStatusObjectsAsHtml(array(new \stdClass()));
-	}
-
-	/**
-	 * @test
-	 */
-	public function renderStatusObjectsAsHtmlRendersSeverity() {
-		$mockStatus = $this->getMock('TYPO3\\CMS\\Install\\Status\\StatusInterface');
-		$uniqueSeverity = uniqid('severity_');
-		$mockStatus->expects($this->once())->method('getSeverity')->will($this->returnValue($uniqueSeverity));
-		$statusUtility = new \TYPO3\CMS\Install\Status\StatusUtility();
-		$this->assertContains($uniqueSeverity, $statusUtility->renderStatusObjectsAsHtml(array($mockStatus)));
-	}
-
-	/**
-	 * @test
-	 */
-	public function renderStatusObjectsAsHtmlRendersTitle() {
-		$mockStatus = $this->getMock('TYPO3\\CMS\\Install\\Status\\StatusInterface');
-		$uniqueTitle = uniqid('title_');
-		$mockStatus->expects($this->once())->method('getTitle')->will($this->returnValue($uniqueTitle));
-		$statusUtility = new \TYPO3\CMS\Install\Status\StatusUtility();
-		$this->assertContains($uniqueTitle, $statusUtility->renderStatusObjectsAsHtml(array($mockStatus)));
-	}
-
-	/**
-	 * @test
-	 */
-	public function renderStatusObjectsAsHtmlRendersMessage() {
-		$mockStatus = $this->getMock('TYPO3\\CMS\\Install\\Status\\StatusInterface');
-		$uniqueMessage = uniqid('message_');
-		$mockStatus->expects($this->once())->method('getMessage')->will($this->returnValue($uniqueMessage));
-		$statusUtility = new \TYPO3\CMS\Install\Status\StatusUtility();
-		$this->assertContains($uniqueMessage, $statusUtility->renderStatusObjectsAsHtml(array($mockStatus)));
-	}
-
 	/**
 	 * @test
 	 */
diff --git a/typo3/sysext/install/ext_autoload.php b/typo3/sysext/install/ext_autoload.php
deleted file mode 100644
index 1edb7b205dba..000000000000
--- a/typo3/sysext/install/ext_autoload.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/*
- * Register necessary class names with autoloader
- */
-$extPath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install');
-return array(
-	'tx_install_report_installstatus' => $extPath . 'report/class.tx_install_report_installstatus.php',
-	'tx_install_service_basicservice' => $extPath . 'Classes/Service/BasicService.php',
-	'tx_install_updates_file_ttcontentupgradewizard' => $extPath . 'Classes/Updates/File/TtContentUpgradeWizard.php',
-	'tx_install_updates_file_ttcontentuploadsupgradewizard' => $extPath . 'Classes/Updates/File/TtContentUploadsUpgradeWizard.php',
-	'tx_install_updates_base' => $extPath . 'Classes/Updates/Base.php',
-	'tx_install_interfaces_checkthedatabasehook' => $extPath . 'Classes/Interfaces/CheckTheDatabaseHook.php'
-);
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/ext_icon.gif b/typo3/sysext/install/ext_icon.gif
old mode 100755
new mode 100644
diff --git a/typo3/sysext/install/ext_localconf.php b/typo3/sysext/install/ext_localconf.php
index cf57ffc2e072..b5522c563bec 100644
--- a/typo3/sysext/install/ext_localconf.php
+++ b/typo3/sysext/install/ext_localconf.php
@@ -2,8 +2,6 @@
 if (!defined('TYPO3_MODE')) {
 	die('Access denied.');
 }
-// TYPO3 6.0 - Update localconf.php to LocalConfiguration.php
-$TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['localConfiguration'] = 'TYPO3\\CMS\\Install\\CoreUpdates\\LocalConfigurationUpdate';
 // TYPO3 6.0 - Create page and TypoScript root template (automatically executed in 123-mode)
 $TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['rootTemplate'] = 'TYPO3\\CMS\\Install\\CoreUpdates\\RootTemplateUpdate';
 // TYPO3 4.5 - Check the database to be utf-8 compliant
@@ -23,8 +21,6 @@ $TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['extensionManagerTables'
 $TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['installSystemExtensions'] = 'TYPO3\\CMS\\Install\\CoreUpdates\\InstallSysExtsUpdate';
 // change tt_content.imagecols=0 to 1 for proper display in TCEforms since TYPO3 4.3
 $TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['changeImagecolsValue'] = 'TYPO3\\CMS\\Install\\CoreUpdates\\ImagecolsUpdate';
-// register eID script for install tool AJAX calls
-$TYPO3_CONF_VARS['FE']['eID_include']['tx_install_ajax'] = 'EXT:install/mod/class.tx_install_ajax.php';
 // warn for t3skin installed in Version 4.4
 $TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['checkForT3SkinInstalled'] = 'TYPO3\\CMS\\Install\\CoreUpdates\\T3skinUpdate';
 // Version 4.4: warn for set CompressionLevel and warn user to update his .htaccess
diff --git a/typo3/sysext/install/ext_tables.php b/typo3/sysext/install/ext_tables.php
index 31a1ceb43ba5..7f19a874501b 100755
--- a/typo3/sysext/install/ext_tables.php
+++ b/typo3/sysext/install/ext_tables.php
@@ -3,9 +3,22 @@ if (!defined('TYPO3_MODE')) {
 	die('Access denied.');
 }
 if (TYPO3_MODE === 'BE') {
-	\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModulePath('tools_install', \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($_EXTKEY) . 'mod/');
-	\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModule('tools', 'install', '', \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($_EXTKEY) . 'mod/');
+	// Register report module additions
 	$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']['tx_reports']['status']['providers']['typo3'][] = 'TYPO3\\CMS\\Install\\Report\\InstallStatusReport';
 	$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']['tx_reports']['status']['providers']['system'][] = 'TYPO3\\CMS\\Install\\Report\\EnvironmentStatusReport';
+
+	// Register backend module
+	\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
+		'TYPO3.CMS.' . $_EXTKEY,
+		'tools',
+		'install', '', array(
+			'BackendModule' => 'index, showEnableInstallToolButton, enableInstallTool',
+		),
+		array(
+			'access' => 'admin',
+			'icon' => 'EXT:' . $_EXTKEY . '/Resources/Public/Images/Icon/BackendModule.gif',
+			'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/BackendModule.xlf',
+		)
+	);
 }
 ?>
\ No newline at end of file
diff --git a/typo3/sysext/install/imgs/copyrights.txt b/typo3/sysext/install/imgs/copyrights.txt
deleted file mode 100644
index 390b097c2efb..000000000000
--- a/typo3/sysext/install/imgs/copyrights.txt
+++ /dev/null
@@ -1,5 +0,0 @@
- Images are:
- - "Christus Consolator" by Carl Block, a stained glass window from Zion Chapel
- - The Jesus statue in Rio de Janeiro, Brazil
-
-(Kasper)
\ No newline at end of file
diff --git a/typo3/sysext/install/imgs/jesus.gif b/typo3/sysext/install/imgs/jesus.gif
deleted file mode 100755
index 8aa99ca01581db200ed8b631ac0c3e1eabb15c60..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21791
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
DR;nBJ

diff --git a/typo3/sysext/install/imgs/jesus.png b/typo3/sysext/install/imgs/jesus.png
deleted file mode 100755
index 3aa8547a220d23535228cbf90b6aa1b035ad54ce..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18952
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

diff --git a/typo3/sysext/install/mod/class.tx_install.php b/typo3/sysext/install/mod/class.tx_install.php
deleted file mode 100644
index 17d41ecc08d3..000000000000
--- a/typo3/sysext/install/mod/class.tx_install.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 1999-2013 Kasper Skårhøj (kasperYYYY@typo3.com)
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project 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.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script 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.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-/**
- * Contains the class for the Install Tool
- *
- * @author 	Kasper Skårhøj <kasperYYYY@typo3.com>
- * @author 	Ingmar Schlecht <ingmar@typo3.org>
- */
-// include session handling
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'mod/class.tx_install_session.php';
-// include update classes
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/CharsetDefaultsUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/CompatVersionUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/CscSplitUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/NotInMenuUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/MergeAdvancedUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/InstallSysExtsUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/ImagecolsUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/T3skinUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/CompressionLevelUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/MigrateWorkspacesUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/FlagsFromSpriteUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/AddFlexFormsToAclUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/ImagelinkUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/MediaFlexformUpdate.php';
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/LocalConfigurationUpdate.php';
-/*
- * @deprecated since 6.0, the classname tx_install and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/Installer.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/Installer.php';
-?>
diff --git a/typo3/sysext/install/mod/class.tx_install_ajax.php b/typo3/sysext/install/mod/class.tx_install_ajax.php
deleted file mode 100644
index 72d4ec24247b..000000000000
--- a/typo3/sysext/install/mod/class.tx_install_ajax.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_install_ajax and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/EidHandler.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/EidHandler.php';
-// Make instance:
-$SOBE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\EidHandler');
-$SOBE->init();
-$SOBE->main();
-$SOBE->printContent();
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/mod/class.tx_install_session.php b/typo3/sysext/install/mod/class.tx_install_session.php
deleted file mode 100644
index c2ca3b20c5b4..000000000000
--- a/typo3/sysext/install/mod/class.tx_install_session.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_install_session and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/Session.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/Session.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/mod/clear.gif b/typo3/sysext/install/mod/clear.gif
deleted file mode 100755
index 9ed1269764b890333782a01489c53f5ac896f2aa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 46
vcmZ?wbhEHbWMp7uXkcLY|NlP&1B2pE7Dgb&paUX6G7L;iE{qJ;nQ6QL->C=H

diff --git a/typo3/sysext/install/mod/conf.php b/typo3/sysext/install/mod/conf.php
deleted file mode 100755
index 42da12e07363..000000000000
--- a/typo3/sysext/install/mod/conf.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-define('TYPO3_MOD_PATH', 'sysext/install/mod/');
-$BACK_PATH = '../../../';
-$MLANG['default']['tabs_images']['tab'] = 'install.gif';
-$MLANG['default']['ll_ref'] = 'LLL:EXT:install/mod/locallang_mod.xml';
-$MCONF['name'] = 'tools_install';
-$MCONF['script'] = '_DISPATCH';
-$MCONF['access'] = 'admin';
-$MCONF['workspaces'] = 'online';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/mod/mod_styles.css b/typo3/sysext/install/mod/mod_styles.css
deleted file mode 100644
index 198f9ee9abc0..000000000000
--- a/typo3/sysext/install/mod/mod_styles.css
+++ /dev/null
@@ -1,42 +0,0 @@
-body#ext-install-mod-index-php {
-	margin: 0;
-	padding: 0;
-}
-
-#typo3-inner-docbody p.help {
-	font-size: 12px;
-	margin-bottom: 10px;
-}
-
-#ext-install-mod-index-php #container {
-	margin-top: 11em;
-}
-
-.typo3-message h2 {
-	color: #9E7D4A;
-	font-size: 16px;
-}
-
-span.t3-install-form-button-icon-positive {
-    background: url("../../../gfx/ok.png") no-repeat scroll 0 0 transparent;
-    display: inline-block;
-    float: none;
-    height: 16px;
-    margin-left: 0.6em;
-    width: 16px;
-}
-
-form#t3-install-form-unlock button {
-    background: url("../../../sysext/install/Resources/Public/Images/button-background.jpg") repeat-x scroll left bottom #F6F6F6;
-    border: 1px solid #7C7C7C;
-    color: #606060;
-    cursor: pointer;
-    font-size: 1.1em;
-    padding: 0.3em 0.6em;
-	margin-top: 1em;
-}
-
-form#t3-install-form-unlock button:hover {
-    background-image: url("../../../sysext/install/Resources/Public/Images/button-background-hover.jpg");
-    background-color: #EDEDED;
-}
\ No newline at end of file
diff --git a/typo3/sysext/install/mod/mod_template.html b/typo3/sysext/install/mod/mod_template.html
deleted file mode 100644
index 06bfaf869743..000000000000
--- a/typo3/sysext/install/mod/mod_template.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!-- ###FULLDOC### begin -->
-<div class="typo3-fullDoc">
-	<!-- Empty docheader -->
-	<div id="typo3-docheader">
-		<div class="typo3-docheader-functions">
-			<div class="left"></div>
-			<div class="right"></div>
-		</div>
-	</div>
-	<!-- Content of module, for instance listing, info or editing -->
-	<div id="typo3-docbody">
-		<div id="typo3-inner-docbody">
-			###CONTENT###
-		</div>
-	</div>
-</div>
-<!-- ###FULLDOC### end -->
-
-<!-- Grouping the icons on top -->
-
-<!-- ###BUTTON_GROUP_WRAP### -->
-	<div class="buttongroup">###BUTTONS###</div>
-<!-- ###BUTTON_GROUP_WRAP### -->
-
-<!-- ###BUTTON_GROUPS_LEFT### -->
-
-<!-- ###BUTTON_GROUPS_LEFT### -->
-
-<!-- ###BUTTON_GROUPS_RIGHT### -->
-<!-- ###BUTTON_GROUP1### -->###SHORTCUT###<!-- ###BUTTON_GROUP1### -->
-<!-- ###BUTTON_GROUPS_RIGHT### -->
\ No newline at end of file
diff --git a/typo3/sysext/install/report/class.tx_install_report_installstatus.php b/typo3/sysext/install/report/class.tx_install_report_installstatus.php
deleted file mode 100644
index 112b840402b1..000000000000
--- a/typo3/sysext/install/report/class.tx_install_report_installstatus.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_install_report_InstallStatus and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/Report/InstallStatusReport.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/Report/InstallStatusReport.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/report/locallang.xlf b/typo3/sysext/install/report/locallang.xlf
deleted file mode 100644
index 4d65235185de..000000000000
--- a/typo3/sysext/install/report/locallang.xlf
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="messages" date="2011-10-17T20:22:33Z" product-name="install">
-		<header/>
-		<body>
-			<trans-unit id="status_fileSystem" xml:space="preserve">
-				<source>File System</source>
-			</trans-unit>
-			<trans-unit id="status_writable" xml:space="preserve">
-				<source>Writable</source>
-			</trans-unit>
-			<trans-unit id="status_missingDirectory" xml:space="preserve">
-				<source>Required Directory Missing</source>
-			</trans-unit>
-			<trans-unit id="status_nonExistingDirectory" xml:space="preserve">
-				<source>Directory not existing</source>
-			</trans-unit>
-			<trans-unit id="status_recommendedWritableDirectory" xml:space="preserve">
-				<source>Directory should be writable</source>
-			</trans-unit>
-			<trans-unit id="status_requiredWritableDirectory" xml:space="preserve">
-				<source>Directory not writable</source>
-			</trans-unit>
-			<trans-unit id="status_directoryDoesNotExist" xml:space="preserve">
-				<source>%s does not exist.</source>
-			</trans-unit>
-			<trans-unit id="status_directoryDoesNotExistCouldNotCreate" xml:space="preserve">
-				<source>%s does not exist and could not be created.</source>
-			</trans-unit>
-			<trans-unit id="status_directoryShouldAlsoBeWritable" xml:space="preserve">
-				<source>Also note that it should be writable, if it did exist.</source>
-			</trans-unit>
-			<trans-unit id="status_directoryShouldBeWritable" xml:space="preserve">
-				<source>%s should be writable.</source>
-			</trans-unit>
-			<trans-unit id="status_directoryMustBeWritable" xml:space="preserve">
-				<source>%s must be writable.</source>
-			</trans-unit>
-			<trans-unit id="status_remainingUpdates" xml:space="preserve">
-				<source>Remaining Updates</source>
-			</trans-unit>
-		</body>
-	</file>
-</xliff>
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_addflexformstoacl.php b/typo3/sysext/install/updates/class.tx_coreupdates_addflexformstoacl.php
deleted file mode 100644
index e15c44a526f4..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_addflexformstoacl.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_addflexformstoacl and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/AddFlexFormsToAclUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/AddFlexFormsToAclUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_charsetdefaults.php b/typo3/sysext/install/updates/class.tx_coreupdates_charsetdefaults.php
deleted file mode 100644
index 60a0e2c191e0..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_charsetdefaults.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_charsetDefaults and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/CharsetDefaultsUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/CharsetDefaultsUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_compatversion.php b/typo3/sysext/install/updates/class.tx_coreupdates_compatversion.php
deleted file mode 100644
index eef8d43932cd..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_compatversion.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_compatversion and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/CompatVersionUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/CompatVersionUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_compressionlevel.php b/typo3/sysext/install/updates/class.tx_coreupdates_compressionlevel.php
deleted file mode 100644
index c81d7c90c447..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_compressionlevel.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_compressionlevel and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/CompressionLevelUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/CompressionLevelUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_cscsplit.php b/typo3/sysext/install/updates/class.tx_coreupdates_cscsplit.php
deleted file mode 100644
index c66e38a32ab7..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_cscsplit.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_cscsplit and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/CscSplitUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/CscSplitUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_flagsfromsprite.php b/typo3/sysext/install/updates/class.tx_coreupdates_flagsfromsprite.php
deleted file mode 100644
index 84ff2048ded8..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_flagsfromsprite.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_flagsfromsprite and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/FlagsFromSpriteUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/FlagsFromSpriteUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_imagelink.php b/typo3/sysext/install/updates/class.tx_coreupdates_imagelink.php
deleted file mode 100644
index 245d388ca72e..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_imagelink.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_imagelink and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/ImagelinkUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/ImagelinkUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_imagescols.php b/typo3/sysext/install/updates/class.tx_coreupdates_imagescols.php
deleted file mode 100644
index d9d2f2b19bd0..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_imagescols.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_imagecols and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/ImagecolsUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/ImagecolsUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_installsysexts.php b/typo3/sysext/install/updates/class.tx_coreupdates_installsysexts.php
deleted file mode 100644
index bece4dcb5b81..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_installsysexts.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_installsysexts and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/InstallSysExtsUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/InstallSysExtsUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_localconfiguration.php b/typo3/sysext/install/updates/class.tx_coreupdates_localconfiguration.php
deleted file mode 100644
index f883a73e7dbc..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_localconfiguration.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_localConfiguration and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/LocalConfigurationUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/LocalConfigurationUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_mediaflexform.php b/typo3/sysext/install/updates/class.tx_coreupdates_mediaflexform.php
deleted file mode 100644
index 4c48736c5a6a..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_mediaflexform.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_mediaFlexform and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/MediaFlexformUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/MediaFlexformUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_mergeadvanced.php b/typo3/sysext/install/updates/class.tx_coreupdates_mergeadvanced.php
deleted file mode 100644
index 072d940109e3..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_mergeadvanced.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_mergeadvanced and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/MergeAdvancedUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/MergeAdvancedUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_migrateworkspaces.php b/typo3/sysext/install/updates/class.tx_coreupdates_migrateworkspaces.php
deleted file mode 100644
index 133421a3741f..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_migrateworkspaces.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_migrateworkspaces and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/MigrateWorkspacesUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/MigrateWorkspacesUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_notinmenu.php b/typo3/sysext/install/updates/class.tx_coreupdates_notinmenu.php
deleted file mode 100644
index d6139bca7f7b..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_notinmenu.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_notinmenu and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/NotInMenuUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/NotInMenuUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_t3skin.php b/typo3/sysext/install/updates/class.tx_coreupdates_t3skin.php
deleted file mode 100644
index 51ba675601a9..000000000000
--- a/typo3/sysext/install/updates/class.tx_coreupdates_t3skin.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/*
- * @deprecated since 6.0, the classname tx_coreupdates_t3skin and this file is obsolete
- * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/install/Classes/CoreUpdates/T3skinUpdate.php
- */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Classes/CoreUpdates/T3skinUpdate.php';
-?>
\ No newline at end of file
diff --git a/typo3/sysext/install/verify_imgs/readme.txt b/typo3/sysext/install/verify_imgs/readme.txt
deleted file mode 100755
index aae3461604b5..000000000000
--- a/typo3/sysext/install/verify_imgs/readme.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-These comparison images was generated by Kasper Skårhøj, using:
-
- - TYPO3 3.8.0
- - Image Magick 5.5.7 / FreeType 2 / PHP4
- - This localconf.php configuration:
-
-		// Graphical settings applying to Debian packages for TYPO3:
-	$TYPO3_CONF_VARS['GFX']['im_path_lzw'] = '';
-	$TYPO3_CONF_VARS['GFX']['TTFdpi'] = '96';
-	$TYPO3_CONF_VARS['GFX']['gdlib_png'] = '1';
-	$TYPO3_CONF_VARS['GFX']['im_combine_filename'] = 'composite';
-	$TYPO3_CONF_VARS['GFX']['im_path'] = '/usr/bin/';
-	$TYPO3_CONF_VARS['GFX']['im_version_5'] = 'im5';
-	$TYPO3_CONF_VARS['GFX']['im_imvMaskState'] = '0';
-	$TYPO3_CONF_VARS['GFX']['im_v5effects'] = '1';
-	$TYPO3_CONF_VARS['GFX']['gdlib_2'] = 1;
-	$TYPO3_CONF_VARS['GFX']['im_mask_temp_ext_noloss'] = 'png';
-
-- PHP / GD configuration:
-	GD Support		enabled
-	GD Version		2.0 or higher
-	FreeType Support	enabled
-	FreeType Linkage	with freetype
-	T1Lib Support		enabled
-	GIF Read Support	enabled
-	GIF Create Support	enabled
-	JPG Support		enabled
-	PNG Support		enabled
-	WBMP Support		enabled
-
-
-- I was not able to create GIF files for reference so I just converted them directly with ImageMagick
-- Also LZW compression has NOT been used anywhere except the GD test images since ImageMagick doesn't support it.
-
-
-(Kasper Skårhøj)
\ No newline at end of file
-- 
GitLab