diff --git a/doc/images/qtcreator-cmake-build-settings.png b/doc/images/qtcreator-cmake-build-settings.png
index 512d002df90f4f60e7432e0244e26bb3fda45e5b..2c2af74c6d01eabb54486e09bb47e613004ac0fa 100644
Binary files a/doc/images/qtcreator-cmake-build-settings.png and b/doc/images/qtcreator-cmake-build-settings.png differ
diff --git a/doc/images/qtcreator-cmake-build-steps.png b/doc/images/qtcreator-cmake-build-steps.png
new file mode 100644
index 0000000000000000000000000000000000000000..1679217c51e9db9f297c71f4c2b0baf20e8a9a17
Binary files /dev/null and b/doc/images/qtcreator-cmake-build-steps.png differ
diff --git a/doc/images/qtcreator-cmake-clean-steps.png b/doc/images/qtcreator-cmake-clean-steps.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ecfbc74f1196946ace91b87f57528cdee746755
Binary files /dev/null and b/doc/images/qtcreator-cmake-clean-steps.png differ
diff --git a/doc/images/qtcreator-cmake-import-wizard1.png b/doc/images/qtcreator-cmake-import-wizard1.png
deleted file mode 100644
index 9749ed9ffa658896f2e44c8d9eea185a4de4cf95..0000000000000000000000000000000000000000
Binary files a/doc/images/qtcreator-cmake-import-wizard1.png and /dev/null differ
diff --git a/doc/images/qtcreator-cmake-import-wizard2.png b/doc/images/qtcreator-cmake-import-wizard2.png
deleted file mode 100644
index 574bb9a0553930b08104f72bc119cebdb7c0d866..0000000000000000000000000000000000000000
Binary files a/doc/images/qtcreator-cmake-import-wizard2.png and /dev/null differ
diff --git a/doc/images/qtcreator-cmake-run-cmake.png b/doc/images/qtcreator-cmake-run-cmake.png
new file mode 100644
index 0000000000000000000000000000000000000000..c778ea45116a5430a7dcf29bdd50396b0ffcc660
Binary files /dev/null and b/doc/images/qtcreator-cmake-run-cmake.png differ
diff --git a/doc/images/qtcreator-cmake-run-settings.png b/doc/images/qtcreator-cmake-run-settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..229bdae6dd1c2d1abc60d81fd7d6a4e7bc67ce4d
Binary files /dev/null and b/doc/images/qtcreator-cmake-run-settings.png differ
diff --git a/doc/images/qtcreator-cmakeexecutable.png b/doc/images/qtcreator-cmakeexecutable.png
index 711c2f708ce766a147f2943b810cb93da8e5ce35..c50c05a20bbbce5b79332487698e6cad444b9871 100644
Binary files a/doc/images/qtcreator-cmakeexecutable.png and b/doc/images/qtcreator-cmakeexecutable.png differ
diff --git a/doc/images/qtcreator-kits.png b/doc/images/qtcreator-kits.png
index 13bc784a763926a981092727356e1a0c9d17f563..1a3d5e1336c1b77112abd2322a35aef6b3ce8b50 100644
Binary files a/doc/images/qtcreator-kits.png and b/doc/images/qtcreator-kits.png differ
diff --git a/doc/src/overview/creator-issues.qdoc b/doc/src/overview/creator-issues.qdoc
index 48b8e29cd0adf750c48b449f1bf44a98a8cd91e3..06212266fad573ed2c8ada6f24b4f97a3a9f59f1 100644
--- a/doc/src/overview/creator-issues.qdoc
+++ b/doc/src/overview/creator-issues.qdoc
@@ -109,8 +109,6 @@
             items with names consisting of plain characters, numbers,
             underscores, and hyphens.
 
-        \li  Creating new CMake projects with \QC is not supported.
-
         \li  If error messages displayed in the \uicontrol {Compile Output} pane contain
             paths where slashes are missing (for example, C:QtSDK),
             check your PATH variable. For more information, see
diff --git a/doc/src/projects/creator-projects-cmake.qdoc b/doc/src/projects/creator-projects-cmake.qdoc
index 8f406a69ee35db8f4323d33e546d152cc5bcc5da..74ea95c0e270641520ede6df3a555365bd72b555 100644
--- a/doc/src/projects/creator-projects-cmake.qdoc
+++ b/doc/src/projects/creator-projects-cmake.qdoc
@@ -43,67 +43,104 @@
     native build configurations and workspaces that you can use in the compiler
     environment of your choice.
 
-    Since \QC 1.1, CMake configuration files are supported. Since \QC 1.3, the
-    Microsoft tool chain is supported if the CMake version is at least 2.8.
-
     \QC automatically detects the CMake executable specified in the \c PATH.
     You can add paths to other CMake executables and use them in different
     build and run \l{glossary-buildandrun-kit}{kits}.
 
     \section1 Adding CMake Tools
 
-    To specify paths to CMake executables, select \uicontrol Tools >
-    \uicontrol Options > \uicontrol {Build & Run} > \uicontrol CMake >
-    \uicontrol Add.
+    \QC supports CMake version 2.9, or later.
 
-    \image qtcreator-cmakeexecutable.png
+    To specify paths to CMake executables and to add them to kits:
 
-    \section1 Opening CMake Projects
+    \list 1
 
-    \note Before you open a CMake project, you must modify the \c {PATH}
-    environment variable to include the bin folders of \c mingw and Qt.
+        \li Select \uicontrol Tools > \uicontrol Options >
+            \uicontrol {Build & Run} > \uicontrol CMake > \uicontrol Add.
 
-    For instance, if Qt 5.5 is installed in \c {C:\Qt}, you would use the
-    following command to set the environment variables in the command line
-    prompt:
-    \code
-    set PATH=C:\Qt\Tools\mingw<VERSION>\bin;C:\Qt\5.5\<TARGET>\bin;
-    \endcode
-    Then start \QC by typing:
-    \code
-    C:\Qt\Tools\QtCreator\qtcreator.exe
-    \endcode
+            \image qtcreator-cmakeexecutable.png
+
+        \li In the \uicontrol Name field, specify a name for the tool.
+
+        \li In the \uicontrol Path field, specify the path to the CMake
+            executable.
+
+        \li Select \uicontrol Apply to save your changes.
+
+        \li Select the \uicontrol Kits tab to add the CMake tool to a build and
+            run kit. The kit also specifies the CMake Generator that is used for
+            producing project files for \QC and the configuration variables that
+            are used:
 
-    To open a CMake project:
+            \image qtcreator-kits.png
+
+            For more information, see \l {Adding Kits}.
+
+    \endlist
+
+    \section1 Creating CMake Projects
+
+    To create a CMake project:
 
     \list 1
 
-        \li Select \uicontrol File > \uicontrol {Open File or Project}.
+        \li Select \uicontrol File > \uicontrol {New File or Project} >
+            \uicontrol {Non-Qt Project} > \uicontrol {Plain C Application} or
+            \uicontrol {Plain C++ Application} > \uicontrol Choose.
 
-        \li Select the \c {CMakeLists.txt} file from your CMake project.
+        \li In the \uicontrol Name field, enter a name for the project.
+
+        \li In the \uicontrol {Create in} field, enter the path for the project
+            files, and then select \uicontrol Next (or \uicontrol Continue on
+            OS X).
+
+        \li In the \uicontrol {Build system} field, select \uicontrol CMake, and
+            then select \uicontrol Next.
+
+        \li Select CMake kits for the platforms that you want to build the
+            application for, and then select \uicontrol Next.
+
+        \li Review the project settings, and click \uicontrol{Finish} (or
+            \uicontrol Done on OS X).
+
+        \li Select \uicontrol {Run CMake} to generate a .cbp file.
+
+            \image qtcreator-cmake-run-cmake.png
+
+            Some projects require command line arguments to the initial CMake
+            call. CMake will remember the arguments during subsequent calls.
 
     \endlist
 
-    A wizard guides you through the rest of the process.
+    \QC generates a \c {main.cpp} and \c {CMakeLists.txt} file that you can
+    modify in the \uicontrol Edit mode.
 
-    \note If the CMake project does not have an in-place build, \QC
-    lets you specify the directory in which the project is built
-    (\l{glossary-shadow-build}{shadow build}).
+    \section1 Opening CMake Projects
 
-    \image qtcreator-cmake-import-wizard1.png
+    To open an existing CMake project:
 
-    The screenshot below shows how you can specify command line arguments to
-    CMake for your project.
+    \list 1
 
-    \image qtcreator-cmake-import-wizard2.png
+        \li Select \uicontrol File > \uicontrol {Open File or Project}.
+
+        \li Select the \c {CMakeLists.txt} file from your CMake project.
 
-    Normally, there is no need to pass any command line arguments for projects
-    that are already built, as CMake caches that information.
+        \li Select a kit that is configured to use CMake for building the
+            project.
+
+        \li In \uicontrol Projects, right-click the project name to open the
+            context menu, and then select \uicontrol {Run CMake} to have the
+            project contents listed in the view.
+
+    \endlist
 
     \section1 Editing CMake Configuration Files
 
-    You can open CMake configuration files in \QC for editing. The following
-    features are supported:
+    To open a CMakeLists.txt file for editing, right-click it in the
+    \uicontrol Projects view and select \uicontrol {Open with} >
+    \uicontrol {CMake Editor}.
+
+    The following features are supported:
 
     \list
 
@@ -119,31 +156,55 @@
 
     \section1 Building CMake Projects
 
-    \QC builds CMake projects by running \c make, \c mingw32-make,
-    \c nmake, or \c ninja depending on your platform. The build errors and
-    warnings are parsed and displayed in the \uicontrol Issues output pane.
+    To build CMake projects, select \uicontrol {Build Project} or press
+    \key Ctrl+B (or \key Cmd+B on OS X).
+
+    \QC builds CMake projects by running \c make, \c mingw32-make, \c nmake, or
+    \c ninja depending on the selected kit.
 
-    By default, \QC uses the \uicontrol All \l{glossary-build-config}
+    By default, \QC uses the \uicontrol Default \l{glossary-build-config}
     {build configuration}. You can select another build configuration in
-    \uicontrol Projects > \uicontrol {Edit build configuration}. In addition to
+    \uicontrol Projects > \uicontrol {Build Settings} >
+    \uicontrol {Edit build configuration}. In addition to
     debug and release build configurations, you can create a release build that
     contains debug information or a release build with the smallest possible
     size.
 
     \image qtcreator-cmake-build-settings.png
 
-    You can change the build directory after the initial import.
+    In the \uicontrol {Build directory} field, you can specify the directory in
+    which the project is built (\l{glossary-shadow-build}{shadow build}).
+
+    To view all settings, select the \uicontrol Advanced check box.
+
+    To modify the value of a build setting, select it, and then select
+    \uicontrol Edit. The new value is displayed in italics until you save the
+    changes by selecting \uicontrol {Apply Configuration Changes}. Any
+    configuration change might trigger a follow-up configuration change, so keep
+    saving until no more values are displayed in italics.
 
-    The build and run kit that you select determines which CMake tool is used
-    for building. For more information, see \l {Adding Kits}.
+    You can add arguments and targets for the build command in
+    \uicontrol {Build Steps}.
+
+    \image qtcreator-cmake-build-steps.png
+
+    You can add arguments and targets for the clean command in
+    \uicontrol {Clean Steps}.
+
+    \image qtcreator-cmake-clean-steps.png
+
+    The build errors and warnings are parsed and displayed in the
+    \uicontrol Issues output pane.
 
     \section1 Running CMake Projects
 
     \QC automatically adds \uicontrol {Run Configurations} for all targets
     specified in the CMake project file.
 
-    For more information about known issues for the current version, see
-    \l{Known Issues}.
+    \image qtcreator-cmake-run-settings.png
+
+    To run CMake projects, select \uicontrol Run or press \key Ctrl+R (or
+    \key Cmd+R on OS X).
 
     \section1 Deploying CMake Projects to Embedded Linux Devices
 
diff --git a/doc/src/projects/creator-projects-targets.qdoc b/doc/src/projects/creator-projects-targets.qdoc
index 2a34e6df341259453b04edeeb0d42366f9d37719..d332355e5a74e171b31458e56adba658d61e8d51 100644
--- a/doc/src/projects/creator-projects-targets.qdoc
+++ b/doc/src/projects/creator-projects-targets.qdoc
@@ -126,6 +126,16 @@
             CMake tools to the list. For more information, see
             \l{Adding CMake Tools}.
 
+        \li In the \uicontrol {CMake Generator} field, select the CMake
+            Generator to use for producing project files. Only the generators
+            with names beginning with the string \uicontrol CodeBlocks produce
+            all the necessary data for the \QC code model. \QC displays a
+            warning if you select a generator that is not supported.
+
+        \li In the \uicontrol {CMake configuration} field, select
+            \uicontrol Change to edit the variables of the CMake configuration
+            for the kit.
+
     \endlist
 
 */
diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py
index b2b0ffd4eb33581bd8d239aee8dd9abb62f46e06..0d8908730a4aa8846d8e8d19ece33a4c9da46761 100644
--- a/share/qtcreator/debugger/qttypes.py
+++ b/share/qtcreator/debugger/qttypes.py
@@ -426,7 +426,7 @@ def qdump__QFile(d, value):
         if d.isWindowsTarget():
             offset = 164 if is32bit else 248
         else:
-            offset = 156 if is32bit else 248
+            offset = 164 if is32bit else 248
     elif qtVersion >= 0x050400:
         if d.isWindowsTarget():
             offset = 188 if is32bit else 272
diff --git a/share/qtcreator/translations/qtcreator_ru.ts b/share/qtcreator/translations/qtcreator_ru.ts
index ddd6ece543fe58e92cb7e2aa6060ed25e969033a..06a6914e404c2ea7cc906ddfb59262034f55b48a 100644
--- a/share/qtcreator/translations/qtcreator_ru.ts
+++ b/share/qtcreator/translations/qtcreator_ru.ts
@@ -32,6 +32,37 @@
         <translation>Файл «%1» не является файлом документации.</translation>
     </message>
 </context>
+<context>
+    <name>AddSignalHandlerDialog</name>
+    <message>
+        <source>Implement Signal Handler</source>
+        <translation>Реализация обработчика сигналов</translation>
+    </message>
+    <message>
+        <source>Frequently used signals</source>
+        <translation>Популярные сигналы</translation>
+    </message>
+    <message>
+        <source>Property changes</source>
+        <translation>Изменение свойств</translation>
+    </message>
+    <message>
+        <source>All signals</source>
+        <translation>Все сигналы</translation>
+    </message>
+    <message>
+        <source>Signal:</source>
+        <translation>Сигнал:</translation>
+    </message>
+    <message>
+        <source>Choose the signal you want to handle:</source>
+        <translation>Выберите сигнал для обработки:</translation>
+    </message>
+    <message>
+        <source>The item will be exported automatically.</source>
+        <translation>Элемент будет автоматически экспортирован.</translation>
+    </message>
+</context>
 <context>
     <name>AdvancedSection</name>
     <message>
@@ -82,153 +113,6 @@
         <translation>Анализатор</translation>
     </message>
 </context>
-<context>
-    <name>Analyzer::AnalyzerManager</name>
-    <message>
-        <source>Debug</source>
-        <translation>Отладка</translation>
-    </message>
-    <message>
-        <source>Profile</source>
-        <translation>Профилирование</translation>
-    </message>
-    <message>
-        <source>Release</source>
-        <translation>Выпуск</translation>
-    </message>
-    <message>
-        <source>in Debug mode</source>
-        <translation>она создана для режима отладки</translation>
-    </message>
-    <message>
-        <source>in Profile mode</source>
-        <translation>она создана для режима профилирования</translation>
-    </message>
-    <message>
-        <source>in Release mode</source>
-        <translation>она создана для режима выпуска</translation>
-    </message>
-    <message>
-        <source>with debug symbols (Debug or Profile mode)</source>
-        <translation>ей требуются отладочные символы (отладка или профилирование)</translation>
-    </message>
-    <message>
-        <source>on optimized code (Profile or Release mode)</source>
-        <translation>ей требуется оптимизированный код (профилирование или выпуск)</translation>
-    </message>
-    <message>
-        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;You are trying to run the tool &quot;%1&quot; on an application in %2 mode. The tool is designed to be used %3.&lt;/p&gt;&lt;p&gt;Run-time characteristics differ significantly between optimized and non-optimized binaries. Analytical findings for one mode may or may not be relevant for the other.&lt;/p&gt;&lt;p&gt;Running tools that need debug symbols on binaries that don&apos;t provide any may lead to missing function names or otherwise insufficient output.&lt;/p&gt;&lt;p&gt;Do you want to continue and run the tool in %2 mode?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
-        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Вы пытаетесь запустить утилиту «%1» для приложения в режиме %2, а %3.&lt;/p&gt;&lt;p&gt;Характер работы приложения сильно зависит от оптимизации. Выводы, сделанные для одного режима, могут быть неверны для другого.&lt;/p&gt;&lt;p&gt;Запуск утилиты требующей отладочные символы для программ их не имеющих приведёт к проблемам определения имён функций или некорректному выводу информации.&lt;/p&gt;&lt;p&gt;Запустить утилиту в режиме %2?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
-    </message>
-    <message>
-        <source>Run %1 in %2 Mode?</source>
-        <translation>Выполнить %1 в режиме %2?</translation>
-    </message>
-    <message>
-        <source>Analyze</source>
-        <translation>Анализ</translation>
-    </message>
-    <message>
-        <source>&amp;Analyze</source>
-        <translation>&amp;Анализ</translation>
-    </message>
-    <message>
-        <source>Start</source>
-        <translation>Запустить</translation>
-    </message>
-    <message>
-        <source>Stop</source>
-        <translation>Остановить</translation>
-    </message>
-    <message>
-        <source>Analyzer Toolbar</source>
-        <translation>Панель анализатора</translation>
-    </message>
-    <message>
-        <source>An analysis is still in progress.</source>
-        <translation>Производится анализ.</translation>
-    </message>
-    <message>
-        <source>No analyzer tool selected.</source>
-        <translation>Инструмент анализа не выбран.</translation>
-    </message>
-</context>
-<context>
-    <name>Analyzer::AnalyzerRunConfigWidget</name>
-    <message>
-        <source>Use Customized Settings</source>
-        <translation>Используются особые настройки</translation>
-    </message>
-    <message>
-        <source>Use Global Settings</source>
-        <translation>Используются глобальные настройки</translation>
-    </message>
-</context>
-<context>
-    <name>Analyzer::DetailedErrorView</name>
-    <message>
-        <source>Copy</source>
-        <translation>Копировать</translation>
-    </message>
-</context>
-<context>
-    <name>Analyzer::Internal::AnalyzerPlugin</name>
-    <message>
-        <source>Analyzer</source>
-        <extracomment>Category under which Analyzer tasks are listed in Issues view</extracomment>
-        <translation>Анализатор</translation>
-    </message>
-</context>
-<context>
-    <name>Analyzer::StartRemoteDialog</name>
-    <message>
-        <source>Start Remote Analysis</source>
-        <translation>Запуск удалённой отладки</translation>
-    </message>
-    <message>
-        <source>Kit:</source>
-        <translation>Комплект:</translation>
-    </message>
-    <message>
-        <source>Executable:</source>
-        <translation>Программа:</translation>
-    </message>
-    <message>
-        <source>Arguments:</source>
-        <translation>Параметры:</translation>
-    </message>
-    <message>
-        <source>Working directory:</source>
-        <translation>Рабочий каталог:</translation>
-    </message>
-</context>
-<context>
-    <name>AnalyzerManager</name>
-    <message numerus="yes">
-        <source>Memory Analyzer Tool finished, %n issues were found.</source>
-        <translation>
-            <numerusform>Анализ памяти завершён, найдена %n проблема.</numerusform>
-            <numerusform>Анализ памяти завершён, найдено %n проблемы.</numerusform>
-            <numerusform>Анализ памяти завершён, найдено %n проблем.</numerusform>
-        </translation>
-    </message>
-    <message>
-        <source>Memory Analyzer Tool finished, no issues were found.</source>
-        <translation>Анализ памяти завершён, проблем не найдено.</translation>
-    </message>
-    <message numerus="yes">
-        <source>Log file processed, %n issues were found.</source>
-        <translation>
-            <numerusform>Файл журнала обработан, найдена %n проблема.</numerusform>
-            <numerusform>Файл журнала обработан, найдено %n проблемы.</numerusform>
-            <numerusform>Файл журнала обработан, найдено %n проблем.</numerusform>
-        </translation>
-    </message>
-    <message>
-        <source>Log file processed, no issues were found.</source>
-        <translation>Файл журнала обработан, проблем не найдено.</translation>
-    </message>
-</context>
 <context>
     <name>AnchorRow</name>
     <message>
@@ -545,10 +429,6 @@ Do you want to uninstall the existing package?</source>
         <source>Create Android Virtual Device</source>
         <translation>Создать виртуальное устройство</translation>
     </message>
-    <message>
-        <source>Always use this device for architecture %1</source>
-        <translation>Всегда использовать для архитектуры %1</translation>
-    </message>
     <message>
         <source>ABI:</source>
         <translation>ABI:</translation>
@@ -605,6 +485,14 @@ Do you want to uninstall the existing package?</source>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
+    <message>
+        <source>This can be later reset in deployment settings in the Projects mode.</source>
+        <translation>Можно в любой момент выключить в настройках установки в режиме Проекты.</translation>
+    </message>
+    <message>
+        <source>Always use this device for architecture %1 for this project</source>
+        <translation>Всегда использовать это устройство для архитектуры %1 в этом проекте</translation>
+    </message>
 </context>
 <context>
     <name>Android::Internal::AndroidDeviceFactory</name>
@@ -1418,6 +1306,495 @@ Deploying local Qt libraries is incompatible with Android 5.</source>
         <translation>Непрозрачность</translation>
     </message>
 </context>
+<context>
+    <name>Autotest::Constants</name>
+    <message>
+        <source>&lt;unnamed&gt;</source>
+        <translation>&lt;безымянный&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>Autotest::Internal::AutotestPlugin</name>
+    <message>
+        <source>&amp;Tests</source>
+        <translation>&amp;Тесты</translation>
+    </message>
+    <message>
+        <source>Run &amp;All Tests</source>
+        <translation>Запустить &amp;все</translation>
+    </message>
+    <message>
+        <source>Alt+Shift+T,Alt+A</source>
+        <translation>Alt+Shift+T,Alt+A</translation>
+    </message>
+    <message>
+        <source>&amp;Run Selected Tests</source>
+        <translation>&amp;Запустить выбранные</translation>
+    </message>
+    <message>
+        <source>Alt+Shift+T,Alt+R</source>
+        <translation>Alt+Shift+T,Alt+R</translation>
+    </message>
+    <message>
+        <source>Re&amp;scan Tests</source>
+        <translation>&amp;Пересканировать</translation>
+    </message>
+    <message>
+        <source>Alt+Shift+T,Alt+S</source>
+        <translation>Alt+Shift+T,Alt+S</translation>
+    </message>
+</context>
+<context>
+    <name>Autotest::Internal::GTestOutputReader</name>
+    <message numerus="yes">
+        <source>You have %n disabled test(s).</source>
+        <translation>
+            <numerusform>Имеется %n отключённый тест.</numerusform>
+            <numerusform>Имеется %n отключённых теста.</numerusform>
+            <numerusform>Имеется %n отключённых тестов.</numerusform>
+        </translation>
+    </message>
+    <message>
+        <source>Test execution took %1</source>
+        <translation>Выполнение теста заняло %1</translation>
+    </message>
+    <message>
+        <source>Repeating test case %1 (iteration %2)</source>
+        <translation>Повторное тестирование %1 (повтор %2)</translation>
+    </message>
+    <message>
+        <source>Executing test case %1</source>
+        <translation>Выполнение теста %1</translation>
+    </message>
+    <message>
+        <source>Entering test set %1</source>
+        <translation>Вход в набор тестов %1</translation>
+    </message>
+    <message>
+        <source>Execution took %1.</source>
+        <translation>Выполнение заняло %1.</translation>
+    </message>
+</context>
+<context>
+    <name>Autotest::Internal::QtTestOutputReader</name>
+    <message>
+        <source>Executing test case %1</source>
+        <translation>Выполнение теста %1</translation>
+    </message>
+    <message>
+        <source>Entering test function %1::%2</source>
+        <translation>Вход в тестовую функцию %1::%2</translation>
+    </message>
+    <message>
+        <source>Qt version: %1</source>
+        <translation>Версия Qt: %1</translation>
+    </message>
+    <message>
+        <source>Qt build: %1</source>
+        <translation>Сборка Qt: %1</translation>
+    </message>
+    <message>
+        <source>QTest version: %1</source>
+        <translation>Версия QTest: %1</translation>
+    </message>
+    <message>
+        <source>Execution took %1 ms.</source>
+        <translation>Выполнение заняло %1 мс.</translation>
+    </message>
+    <message>
+        <source>Test finished.</source>
+        <translation>Тест завершён.</translation>
+    </message>
+    <message>
+        <source>Test execution took %1 ms.</source>
+        <translation>Выполнение теста заняло %1 мс.</translation>
+    </message>
+</context>
+<context>
+    <name>Autotest::Internal::TestCodeParser</name>
+    <message>
+        <source>Scanning for Tests</source>
+        <translation>Поиск тестов</translation>
+    </message>
+</context>
+<context>
+    <name>Autotest::Internal::TestNavigationWidget</name>
+    <message>
+        <source>Tests</source>
+        <translation>Тесты</translation>
+    </message>
+    <message>
+        <source>Run This Test</source>
+        <translation>Запустить этот тест</translation>
+    </message>
+    <message>
+        <source>Select All</source>
+        <translation>Выбрать все</translation>
+    </message>
+    <message>
+        <source>Deselect All</source>
+        <translation>Отменить выбор</translation>
+    </message>
+    <message>
+        <source>Filter Test Tree</source>
+        <translation>Отфильтровать дерево тестов</translation>
+    </message>
+    <message>
+        <source>Sort Naturally</source>
+        <translation>Отсортировать по порядку</translation>
+    </message>
+    <message>
+        <source>Expand All</source>
+        <translation>Развернуть всё</translation>
+    </message>
+    <message>
+        <source>Collapse All</source>
+        <translation>Свернуть всё</translation>
+    </message>
+    <message>
+        <source>Sort Alphabetically</source>
+        <translation>Сортировать по алфавиту</translation>
+    </message>
+    <message>
+        <source>Show Init and Cleanup Functions</source>
+        <translation>Показывать функции Init и Cleanup</translation>
+    </message>
+    <message>
+        <source>Show Data Functions</source>
+        <translation>Показывать функции Data</translation>
+    </message>
+</context>
+<context>
+    <name>Autotest::Internal::TestNavigationWidgetFactory</name>
+    <message>
+        <source>Tests</source>
+        <translation>Тесты</translation>
+    </message>
+</context>
+<context>
+    <name>Autotest::Internal::TestResultsPane</name>
+    <message>
+        <source>Expand All</source>
+        <translation>Развернуть всё</translation>
+    </message>
+    <message>
+        <source>Run All Tests</source>
+        <translation>Запуск всех тестов</translation>
+    </message>
+    <message>
+        <source>Run Selected Tests</source>
+        <translation>Запуск выбранных тестов</translation>
+    </message>
+    <message>
+        <source>Stop Test Run</source>
+        <translation>Остановка тестов</translation>
+    </message>
+    <message>
+        <source>Filter Test Results</source>
+        <translation>Фильтрация результатов тестирования</translation>
+    </message>
+    <message>
+        <source>Test Results</source>
+        <translation>Результаты тестирования</translation>
+    </message>
+    <message>
+        <source>Pass</source>
+        <translation>Успешно</translation>
+    </message>
+    <message>
+        <source>Fail</source>
+        <translation>Ошибка</translation>
+    </message>
+    <message>
+        <source>Expected Fail</source>
+        <translation>Ожидаемая ошибка</translation>
+    </message>
+    <message>
+        <source>Unexpected Pass</source>
+        <translation>Неожиданный успех</translation>
+    </message>
+    <message>
+        <source>Skip</source>
+        <translation>Пропущен</translation>
+    </message>
+    <message>
+        <source>Benchmarks</source>
+        <translation>Производительность</translation>
+    </message>
+    <message>
+        <source>Debug Messages</source>
+        <translation>Отладочные сообщения</translation>
+    </message>
+    <message>
+        <source>Warning Messages</source>
+        <translation>Предупреждающие сообщения</translation>
+    </message>
+    <message>
+        <source>Internal Messages</source>
+        <translation>Внутренние сообщения</translation>
+    </message>
+    <message>
+        <source>Check All Filters</source>
+        <translation>Включить все фильтры</translation>
+    </message>
+    <message>
+        <source>passes</source>
+        <translation>успехов</translation>
+    </message>
+    <message>
+        <source>fails</source>
+        <translation>ошибок</translation>
+    </message>
+    <message>
+        <source>unexpected passes</source>
+        <translation>неожиданных успехов</translation>
+    </message>
+    <message>
+        <source>expected fails</source>
+        <translation>ожиданных ошибок</translation>
+    </message>
+    <message>
+        <source>fatals</source>
+        <translation>фатальных</translation>
+    </message>
+    <message>
+        <source>blacklisted</source>
+        <translation>исключённых</translation>
+    </message>
+    <message>
+        <source>, %1 disabled</source>
+        <translation>, %1 отключенных</translation>
+    </message>
+    <message>
+        <source>Copy</source>
+        <translation>Копировать</translation>
+    </message>
+    <message>
+        <source>Copy All</source>
+        <translation>Копировать всё</translation>
+    </message>
+    <message>
+        <source>Save Output to File...</source>
+        <translation>Сохранить вывод в файл...</translation>
+    </message>
+    <message>
+        <source>Save Output To...</source>
+        <translation>Сохранение вывода в...</translation>
+    </message>
+    <message>
+        <source>Error</source>
+        <translation>Ошибка</translation>
+    </message>
+    <message>
+        <source>Failed to write &quot;%1&quot;.
+
+%2</source>
+        <translation>Не удалось записать «%1»:
+
+%2</translation>
+    </message>
+</context>
+<context>
+    <name>Autotest::Internal::TestRunner</name>
+    <message>
+        <source>Project&apos;s run configuration was guessed for &quot;%1&quot;.
+This might cause trouble during execution.</source>
+        <translation>Конфигурация запуска проекта соответствует «%1».
+Это может вызвать проблемы при запуске.</translation>
+    </message>
+    <message>
+        <source>No tests selected. Canceling test run.</source>
+        <translation>Тесты не выбраны. Отмена теста.</translation>
+    </message>
+    <message>
+        <source>Project is null. Canceling test run.
+Only desktop kits are supported. Make sure the currently active kit is a desktop kit.</source>
+        <translation>Проект пуст. Отмена теста.
+Поддерживаются только комплекты для десктопов. Убедитесь, что текущий комплект для десктопа.</translation>
+    </message>
+    <message>
+        <source>Project is not configured. Canceling test run.</source>
+        <translation>Проект не настроен. Отмена теста.</translation>
+    </message>
+    <message>
+        <source>Running Tests</source>
+        <translation>Выполнение тестов</translation>
+    </message>
+    <message>
+        <source>Build failed. Canceling test run.</source>
+        <translation>Сборка не удалась. Отмена теста.</translation>
+    </message>
+</context>
+<context>
+    <name>Autotest::Internal::TestSettingsPage</name>
+    <message>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>General</source>
+        <translation>Основное</translation>
+    </message>
+    <message>
+        <source>Hides internal messages by default. You can still enable them by using the test results filter.</source>
+        <translation>Скрывать внутренние сообщения по умолчанию. Их можно включить используя фильтр результатов тестирования.</translation>
+    </message>
+    <message>
+        <source>Omit internal messages</source>
+        <translation>Опускать внутренние сообщения</translation>
+    </message>
+    <message>
+        <source>Hides warnings related to a guessed run configuration.</source>
+        <translation>Скрывать предупреждения связанные с выбранной конфигурацией запуска.</translation>
+    </message>
+    <message>
+        <source>Omit run configuration warnings</source>
+        <translation>Опускать предупреждения конфигурации запуска</translation>
+    </message>
+    <message>
+        <source>Limit result output to 100000 characters.</source>
+        <translation>Ограничить вывод результата 100000 символами.</translation>
+    </message>
+    <message>
+        <source>Limit result output</source>
+        <translation>Ограничить вывод результата</translation>
+    </message>
+    <message>
+        <source>Automatically scroll down when new items are added and scrollbar is at bottom.</source>
+        <translation>Автоматически пролистывать при добавлении новых элеметов, если ползунок внизу.</translation>
+    </message>
+    <message>
+        <source>Automatically scroll results</source>
+        <translation>Автоматически пролистывать результаты</translation>
+    </message>
+    <message>
+        <source>Parse for tests even when no Tests related widget is displayed.</source>
+        <translation>Искать тесты даже, если тестируемый виджет не отображается.</translation>
+    </message>
+    <message>
+        <source>Always parse current project for tests</source>
+        <translation>Всегда искать тесты в текущем проекте</translation>
+    </message>
+    <message>
+        <source>Timeout used when executing each test case.</source>
+        <translation>Таймаут, используемый при выполнении каждого теста.</translation>
+    </message>
+    <message>
+        <source>Timeout:</source>
+        <translation>Таймаут:</translation>
+    </message>
+    <message>
+        <source>Timeout used when executing test cases. This will apply for each test case on its own, not the whole project.</source>
+        <translation>Таймаут, используемый при выполнении тестов. Он применяется для каждого теста, а не всего проекта.</translation>
+    </message>
+    <message>
+        <source> s</source>
+        <translation> с</translation>
+    </message>
+    <message>
+        <source>Google Test</source>
+        <translation>Google Test</translation>
+    </message>
+    <message>
+        <source>Executes disabled tests when performing a test run.</source>
+        <translation>Запускать отключённые тесты при выполнении тестового запуска.</translation>
+    </message>
+    <message>
+        <source>Run disabled tests</source>
+        <translation>Запускать отключённые тесты</translation>
+    </message>
+    <message>
+        <source>Repeats a test run (you might be required to increase the timeout to avoid canceling the tests).</source>
+        <translation>Повторяет запуск теста (возможно, потребуется увеличить таймаут для предотвращения отмены тестирования).</translation>
+    </message>
+    <message>
+        <source>Repeat tests</source>
+        <translation>Повторять тесты</translation>
+    </message>
+    <message>
+        <source>Iterations:</source>
+        <translation>Повторов:</translation>
+    </message>
+    <message>
+        <source>Shuffle tests automatically on every iteration by the given seed.</source>
+        <translation>Автоматически перемешивать тесты при кажом повторе согласно заданной Seed.</translation>
+    </message>
+    <message>
+        <source>Shuffle tests</source>
+        <translation>Перемешать тесты</translation>
+    </message>
+    <message>
+        <source>Seed:</source>
+        <translation>Seed:</translation>
+    </message>
+    <message>
+        <source>A seed of 0 generates a seed based on the current timestamp.</source>
+        <translation>0 приводит к генерации на основе текущего времени.</translation>
+    </message>
+    <message>
+        <source>Benchmark Metrics</source>
+        <translation>Метрика аттестации</translation>
+    </message>
+    <message>
+        <source>Uses walltime metrics for executing benchmarks (default).</source>
+        <translation>Использовать обычное время при выполнении тестирования производительности (по умолчанию).</translation>
+    </message>
+    <message>
+        <source>Walltime</source>
+        <translation>Время</translation>
+    </message>
+    <message>
+        <source>Uses tick counter when executing benchmarks.</source>
+        <translation>Использовать счётчик тиков при тестировании производительности.</translation>
+    </message>
+    <message>
+        <source>Tick counter</source>
+        <translation>Счётчик тиков</translation>
+    </message>
+    <message>
+        <source>Uses event counter when executing benchmarks.</source>
+        <translation>Использовать счётчик событий при тестировании производительности.</translation>
+    </message>
+    <message>
+        <source>Event counter</source>
+        <translation>Счётчик событий</translation>
+    </message>
+    <message>
+        <source>Uses Valgrind Callgrind when executing benchmarks (it must be installed).</source>
+        <translation>Использовать Valgrind Callgrind при тестировании производительности (должен быть установлен).</translation>
+    </message>
+    <message>
+        <source>Callgrind</source>
+        <translation>Callgrind</translation>
+    </message>
+    <message>
+        <source>Uses Perf when executing benchmarks (it must be installed).</source>
+        <translation>Использовать Perf при тестировании производительности (должен быть установлен).</translation>
+    </message>
+    <message>
+        <source>Perf</source>
+        <translation>Perf</translation>
+    </message>
+    <message>
+        <source>Test Settings</source>
+        <translation>Настройки тестов</translation>
+    </message>
+</context>
+<context>
+    <name>Autotest::Internal::TestTreeModel</name>
+    <message>
+        <source>Auto Tests</source>
+        <translation>Автотесты</translation>
+    </message>
+    <message>
+        <source>Qt Quick Tests</source>
+        <translation>Тесты Qt Quick</translation>
+    </message>
+    <message>
+        <source>Google Tests</source>
+        <translation>Тесты Google</translation>
+    </message>
+</context>
 <context>
     <name>AutotoolsProjectManager::Internal::AutogenStep</name>
     <message>
@@ -1629,10 +2006,6 @@ Deploying local Qt libraries is incompatible with Android 5.</source>
         <source>Executable:</source>
         <translation>Программа:</translation>
     </message>
-    <message>
-        <source>Arguments:</source>
-        <translation>Параметры:</translation>
-    </message>
     <message>
         <source>Work directory:</source>
         <translation>Рабочий каталог:</translation>
@@ -1750,10 +2123,6 @@ Deploying local Qt libraries is incompatible with Android 5.</source>
         <source>Executable:</source>
         <translation>Программа:</translation>
     </message>
-    <message>
-        <source>Arguments:</source>
-        <translation>Параметры:</translation>
-    </message>
     <message>
         <source>&lt;default&gt;</source>
         <translation>&lt;по умолчанию&gt;</translation>
@@ -2012,6 +2381,10 @@ Deploying local Qt libraries is incompatible with Android 5.</source>
 </context>
 <context>
     <name>BaseQtVersion</name>
+    <message>
+        <source>Device type is not supported by Qt version.</source>
+        <translation>Устройства этого типа не поддерживается профилем Qt.</translation>
+    </message>
     <message>
         <source>The compiler &quot;%1&quot; (%2) cannot produce code for the Qt version &quot;%3&quot; (%4).</source>
         <translation>Компилятор «%1» (%2) не может создавать код для профиля Qt «%3» (%4).</translation>
@@ -2416,7 +2789,7 @@ Local commits are not pushed to the master branch until a normal commit is perfo
     </message>
     <message>
         <source>Timeout:</source>
-        <translation>Время ожидания:</translation>
+        <translation>Таймаут:</translation>
     </message>
     <message>
         <source>s</source>
@@ -2622,26 +2995,10 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
 </context>
 <context>
     <name>Beautifier::Internal::BeautifierPlugin</name>
-    <message>
-        <source>Cannot create temporary file &quot;%1&quot;: %2.</source>
-        <translation>Невозможно создать временный файл «%1»: %2.</translation>
-    </message>
-    <message>
-        <source>Cannot call %1 or some other error occurred.</source>
-        <translation>Не удалось вызвать %1 или возникла другая ошибка.</translation>
-    </message>
-    <message>
-        <source>Cannot read file &quot;%1&quot;: %2.</source>
-        <translation>Невозможно прочитать файл «%1»: %2.</translation>
-    </message>
     <message>
         <source>File was modified.</source>
         <translation>Файл изменился.</translation>
     </message>
-    <message>
-        <source>Time out reached while formatting file %1.</source>
-        <translation>Время форматирования файла %1 истекло.</translation>
-    </message>
     <message>
         <source>Could not format file %1.</source>
         <translation>Не удалось переформатировать файл %1.</translation>
@@ -2692,10 +3049,6 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
         <source>Clang Format command:</source>
         <translation>Команда Clang Format:</translation>
     </message>
-    <message>
-        <source>Format entire file if no text was selected. (For action Format Selected Text)</source>
-        <translation>Форматировать файл целиком, если текст не выделен (для «Форматировать выделенное»)</translation>
-    </message>
     <message>
         <source>Clang Format</source>
         <translation>Clang Format</translation>
@@ -2708,6 +3061,14 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
         <source>Use customized style:</source>
         <translation>Использовать особый стиль:</translation>
     </message>
+    <message>
+        <source>For action Format Selected Text</source>
+        <translation>Для операции «Форматировать выделенное»</translation>
+    </message>
+    <message>
+        <source>Format entire file if no text was selected</source>
+        <translation>Форматировать весь файл, если ничего не выбрано</translation>
+    </message>
 </context>
 <context>
     <name>Beautifier::Internal::ConfigurationDialog</name>
@@ -2790,6 +3151,14 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
         <source>Use customized style:</source>
         <translation>Использовать особый стиль:</translation>
     </message>
+    <message>
+        <source>For action Format Selected Text</source>
+        <translation>Для операции «Форматировать выделенное»</translation>
+    </message>
+    <message>
+        <source>Format entire file if no text was selected</source>
+        <translation>Форматировать весь файл, если ничего не выбрано</translation>
+    </message>
 </context>
 <context>
     <name>BinEditor::BinEditorWidget</name>
@@ -3261,6 +3630,71 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
         <translation>Показывать информацию о событии при наведении курсора.</translation>
     </message>
 </context>
+<context>
+    <name>CMakeProjectManager::CMakeBuildStep</name>
+    <message>
+        <source>Qt Creator needs a cmake tool set up to build. Configure a cmake tool in the kit options.</source>
+        <translation>Для сборки необходимо, чтобы была задана утилита cmake. Задайте её в настройках комлекта.</translation>
+    </message>
+</context>
+<context>
+    <name>CMakeProjectManager::CMakeConfigurationKitInformation</name>
+    <message>
+        <source>CMake configuration has no path to qmake binary set, even though the kit has a valid Qt version.</source>
+        <translation>В конфигурации CMake не указан путь к qmake, даже при заданном профиле Qt комплекта.</translation>
+    </message>
+    <message>
+        <source>CMake configuration has a path to a qmake binary set, even though the kit has no valid Qt version.</source>
+        <translation>В конфигурации CMake указан путь к qmake, при незаданном верном профиле Qt комплекта.</translation>
+    </message>
+    <message>
+        <source>CMake configuration has a path to a qmake binary set, which does not match up with the qmake binary path configured in the Qt version.</source>
+        <translation>В конфигурации CMake указан путь к qmake, но он не совпадает с заданным в профиле Qt комплекта.</translation>
+    </message>
+    <message>
+        <source>CMake configuration has no path to a C++ compiler set, even though the kit has a valid tool chain.</source>
+        <translation>В конфигурации CMake не указан путь к компилятору С++, при заданном верном инструментарии комплекта.</translation>
+    </message>
+    <message>
+        <source>CMake configuration has a path to a C++ compiler set, even though the kit has no valid tool chain.</source>
+        <translation>В конфигурации CMake указан путь к компилятору С++, при незаданном верном инструментарии комплекта.</translation>
+    </message>
+    <message>
+        <source>CMake configuration has a path to a C++ compiler set, that does not match up with the compiler path configured in the tool chain of the kit.</source>
+        <translation>В конфигурации CMake указан путь к компилятору С++, но он не совпадает с заданным в инструментарии комплекта.</translation>
+    </message>
+    <message>
+        <source>CMake Configuration</source>
+        <translation>Конфигурация CMake</translation>
+    </message>
+</context>
+<context>
+    <name>CMakeProjectManager::CMakeGeneratorKitInformation</name>
+    <message>
+        <source>No CMake Tool configured, CMake generator will be ignored.</source>
+        <translation>Утилита CMake не задана, генератор CMake игнорируется.</translation>
+    </message>
+    <message>
+        <source>CMake Tool is unconfigured, CMake generator will be ignored.</source>
+        <translation>Утилита CMake не настроена, генератор CMake игнорируется.</translation>
+    </message>
+    <message>
+        <source>CMake Tool does not support the configured generator.</source>
+        <translation>Утилита CMake не поддерживает выбранный генератор.</translation>
+    </message>
+    <message>
+        <source>CMake generator does not generate CodeBlocks file. Qt Creator will not be able to parse the CMake project.</source>
+        <translation>Генератор CMake не создает файл CodeBlocks. Qt Creator не сможет обрабатывать проект CMake.</translation>
+    </message>
+    <message>
+        <source>CMake Generator</source>
+        <translation>Генератор CMake</translation>
+    </message>
+    <message>
+        <source>&lt;Use Default Generator&gt;</source>
+        <translation>&lt;Генератор по умолчанию&gt;</translation>
+    </message>
+</context>
 <context>
     <name>CMakeProjectManager::CMakeKitInformation</name>
     <message>
@@ -3275,8 +3709,8 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
 <context>
     <name>CMakeProjectManager::CMakeProject</name>
     <message>
-        <source>Internal Error: No build configuration found in settings file.</source>
-        <translation>Внутренняя ошибка: Не удалось обнаружить конфигурацию сборки в файле настроек.</translation>
+        <source>No cmake tool set.</source>
+        <translation>Программа cmake не указана.</translation>
     </message>
 </context>
 <context>
@@ -3321,6 +3755,52 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
         <translation>Системная CMake в %1</translation>
     </message>
 </context>
+<context>
+    <name>CMakeProjectManager::ConfigModel</name>
+    <message>
+        <source>&lt;UNSET&gt;</source>
+        <translation>&lt;не задано&gt;</translation>
+    </message>
+    <message>
+        <source>Setting</source>
+        <translation>Настройка</translation>
+    </message>
+    <message>
+        <source>Value</source>
+        <translation>Значение</translation>
+    </message>
+    <message>
+        <source>Advanced</source>
+        <translation>Дополнительно</translation>
+    </message>
+</context>
+<context>
+    <name>CMakeProjectManager::Internal::BuildDirManager</name>
+    <message>
+        <source>The build directory is not for %1</source>
+        <translation>Каталог сборки не для %1</translation>
+    </message>
+    <message>
+        <source>Running &quot;%1 %2&quot; in %3.</source>
+        <translation>Выполнение &quot;%1 %2&quot; в %3.</translation>
+    </message>
+    <message>
+        <source>Configuring &quot;%1&quot;</source>
+        <translation>Настройка «%1»</translation>
+    </message>
+    <message>
+        <source>*** cmake process crashed!</source>
+        <translation>*** процесс cmake завершился крахом!</translation>
+    </message>
+    <message>
+        <source>*** cmake process exited with exit code %1.</source>
+        <translation>*** процесс cmake завершился с кодом %1.</translation>
+    </message>
+    <message>
+        <source>Failed to open %1 for reading.</source>
+        <translation>Не удалось открыть %1 для чтения.</translation>
+    </message>
+</context>
 <context>
     <name>CMakeProjectManager::Internal::CMakeBuildConfigurationFactory</name>
     <message>
@@ -3352,20 +3832,24 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
 <context>
     <name>CMakeProjectManager::Internal::CMakeBuildSettingsWidget</name>
     <message>
-        <source>Run CMake...</source>
-        <translation>Запустить CMake...</translation>
+        <source>Build directory:</source>
+        <translation>Каталог сборки:</translation>
     </message>
     <message>
-        <source>Reconfigure project:</source>
-        <translation>Перенастроить проект:</translation>
+        <source>&amp;Edit</source>
+        <translation>&amp;Изменить</translation>
     </message>
     <message>
-        <source>&amp;Change</source>
-        <translation>&amp;Изменить</translation>
+        <source>&amp;Reset</source>
+        <translation>&amp;Вернуть</translation>
     </message>
     <message>
-        <source>Build directory:</source>
-        <translation>Каталог сборки:</translation>
+        <source>Advanced</source>
+        <translation>Дополнительно</translation>
+    </message>
+    <message>
+        <source>Apply Configuration Changes</source>
+        <translation>Применить изменения</translation>
     </message>
     <message>
         <source>CMake</source>
@@ -3373,131 +3857,137 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::CMakeEditor</name>
+    <name>CMakeProjectManager::Internal::CMakeBuildStep</name>
     <message>
-        <source>Changes to cmake files are shown in the project tree after building.</source>
-        <translation>Изменения в файлах cmake будут отображены в дереве проекта после сборки.</translation>
+        <source>Make</source>
+        <extracomment>Default display name for the cmake make step.</extracomment>
+        <translation>Сборка</translation>
     </message>
     <message>
-        <source>Build now</source>
-        <translation>Собрать</translation>
+        <source>Persisting CMake state...</source>
+        <translation>Фиксация состояния CMake...</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::CMakeKitConfigWidget</name>
+    <name>CMakeProjectManager::Internal::CMakeBuildStepConfigWidget</name>
     <message>
-        <source>CMake Tool:</source>
-        <translation>Утилита CMake:</translation>
+        <source>Tool arguments:</source>
+        <translation>Параметры утилиты:</translation>
     </message>
     <message>
-        <source>The CMake Tool to use when building a project with CMake.&lt;br&gt;This setting is ignored when using other build systems.</source>
-        <translation>Утилита CMake используется для сборки проектов на базе CMake.&lt;br&gt;Эта настройка игнорируется при использовании других систем сборки.</translation>
+        <source>Targets:</source>
+        <translation>Цели:</translation>
     </message>
     <message>
-        <source>&lt;No CMake Tool available&gt;</source>
-        <translation>&lt;Утилита CMake недоступна&gt;</translation>
+        <source>Build</source>
+        <comment>CMakeProjectManager::CMakeBuildStepConfigWidget display name.</comment>
+        <translation>Сборка</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;No build configuration found on this kit.&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Для этого комплекта отсутствует конфигурация сборки.&lt;/b&gt;</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::CMakeLocatorFilter</name>
+    <name>CMakeProjectManager::Internal::CMakeBuildStepFactory</name>
     <message>
-        <source>Build CMake target</source>
-        <translation>Собрать цель CMake</translation>
+        <source>Build</source>
+        <comment>Display name for CMakeProjectManager::CMakeBuildStep id.</comment>
+        <translation>Сборка</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::CMakeManager</name>
+    <name>CMakeProjectManager::Internal::CMakeConfigurationKitConfigWidget</name>
     <message>
-        <source>Run CMake</source>
-        <translation>Запустить CMake</translation>
+        <source>Change...</source>
+        <translation>Изменить...</translation>
     </message>
     <message>
-        <source>Failed opening project &quot;%1&quot;: Project is not a file</source>
-        <translation>Не удалось открыть проект «%1»: проект не является файлом</translation>
+        <source>CMake Configuration</source>
+        <translation>Конфигурация CMake</translation>
     </message>
-</context>
-<context>
-    <name>CMakeProjectManager::Internal::CMakeOpenProjectWizard</name>
     <message>
-        <source>CMake Wizard</source>
-        <translation>Мастер CMake</translation>
+        <source>&lt;No Changes to Apply&gt;</source>
+        <translation>&lt;Нет изменений&gt;</translation>
     </message>
-</context>
-<context>
-    <name>CMakeProjectManager::Internal::CMakeRunConfiguration</name>
     <message>
-        <source>Run CMake kit</source>
-        <translation>Запуск комплекта CMake</translation>
+        <source>Default configuration passed to CMake when setting up a project.</source>
+        <translation>Конфигурация по умолчанию, передаваемая CMake при настройке проекта.</translation>
     </message>
     <message>
-        <source>(disabled)</source>
-        <translation>(отключено)</translation>
+        <source>Edit CMake Configuration</source>
+        <translation>Изменение конфигурации CMake</translation>
     </message>
     <message>
-        <source>The executable is not built by the current build configuration</source>
-        <translation>Приложение собрано не текущей конфигурацией сборки</translation>
+        <source>Enter one variable per line with the variable name separated from the variable value by &quot;=&quot;.&lt;br&gt;You may provide a type hint by adding &quot;:TYPE&quot; before the &quot;=&quot;.</source>
+        <translation>Задавайте значения переменных по одной в строке, отделяя значение от имени символом &quot;=&quot;.&lt;br&gt;Можно указывать тип, добавляя «:ТИП» перед &quot;=&quot;.&lt;br&gt;Например: CMAKE_BUILD_TYPE:STRING=DebWithRelInfo.</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::CMakeRunConfigurationWidget</name>
+    <name>CMakeProjectManager::Internal::CMakeGeneratorKitConfigWidget</name>
     <message>
-        <source>Select Working Directory</source>
-        <translation>Выбор рабочего каталога</translation>
+        <source>CMake Generator:</source>
+        <translation>Генератор CMake:</translation>
     </message>
     <message>
-        <source>Reset to Default</source>
-        <translation>Сбросить в исходное состояние</translation>
+        <source>&lt;Use Default Generator&gt;</source>
+        <translation>&lt;Генератор по умолчанию&gt;</translation>
     </message>
     <message>
-        <source>Working directory:</source>
-        <translation>Рабочий каталог:</translation>
+        <source>CMake generator defines how a project is built when using CMake.&lt;br&gt;This setting is ignored when using other build systems.</source>
+        <translation>Генератор CMake определяет, как проект будет собираться при использовании CMake.&lt;br&gt;Он игнорируется при использовании других систем сборки.</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::CMakeRunPage</name>
-    <message>
-        <source>Run CMake</source>
-        <translation>Запустить CMake</translation>
-    </message>
+    <name>CMakeProjectManager::Internal::CMakeKitConfigWidget</name>
     <message>
-        <source>The build directory &quot;%1&quot; for build configuration &quot;%2&quot; for target &quot;%3&quot; contains an outdated .cbp file. Qt Creator needs to update this file by running CMake. You can add command line arguments below. Note that CMake remembers command line arguments from the previous runs.</source>
-        <translation>Каталог сборки «%1» конфигурации «%2» для цели «%3» содержит устаревший файл *.cbp. Qt Creator должен его обновить путём запуска CMake. Можно передать дополнительные параметры командной строки ниже. Следует иметь в виду, что CMake запоминает параметры командной строки каждого запуска.</translation>
+        <source>CMake Tool:</source>
+        <translation>Утилита CMake:</translation>
     </message>
     <message>
-        <source>The directory &quot;%1&quot; specified in build configuration &quot;%2&quot;, for target &quot;%3&quot; does not contain a .cbp file. Qt Creator needs to recreate this file by running CMake. Some projects require command line arguments to the initial CMake call. Note that CMake remembers command line arguments from the previous runs.</source>
-        <translation>Каталог сборки «%1» конфигурации «%2» цели «%3» не содержит файл *.cbp. Qt Creator должен его создать путём запуска CMake. Некоторым проектам требуется передать параметры командной строки при первом запуске CMake. Следует иметь в виду, что CMake запоминает параметры командной строки каждого запуска.</translation>
+        <source>The CMake Tool to use when building a project with CMake.&lt;br&gt;This setting is ignored when using other build systems.</source>
+        <translation>Утилита CMake используется для сборки проектов на базе CMake.&lt;br&gt;Эта настройка игнорируется при использовании других систем сборки.</translation>
     </message>
     <message>
-        <source>Qt Creator needs to run CMake in the new build directory. Some projects require command line arguments to the initial CMake call.</source>
-        <translation>Qt Creator должен запустить CMake в новом каталоге сборки. Некоторые проекты требуют указания дополнительных параметров командной строки при первом запуске CMake.</translation>
+        <source>&lt;No CMake Tool available&gt;</source>
+        <translation>&lt;Утилита CMake недоступна&gt;</translation>
     </message>
+</context>
+<context>
+    <name>CMakeProjectManager::Internal::CMakeLocatorFilter</name>
     <message>
-        <source>Refreshing the .cbp file in &quot;%1&quot; for build configuration &quot;%2&quot; for target &quot;%3&quot;.</source>
-        <translation>Обновление файла *.cbp в «%1» конфигурации «%2» для цели «%3».</translation>
+        <source>Build CMake target</source>
+        <translation>Собрать цель CMake</translation>
     </message>
+</context>
+<context>
+    <name>CMakeProjectManager::Internal::CMakeManager</name>
     <message>
-        <source>Selected kit has no valid CMake executable specified.</source>
-        <translation>У выбранного комплекта не задана программа CMake.</translation>
+        <source>Run CMake</source>
+        <translation>Запустить CMake</translation>
     </message>
     <message>
-        <source>Open project with errors.</source>
-        <translation>Открывать проекты с ошибками.</translation>
+        <source>Clear CMake Configuration</source>
+        <translation>Очистить конфигурацию</translation>
     </message>
     <message>
-        <source>No generator selected.</source>
-        <translation>Генератор не выбран.</translation>
+        <source>Failed opening project &quot;%1&quot;: Project is not a file</source>
+        <translation>Не удалось открыть проект «%1»: проект не является файлом</translation>
     </message>
+</context>
+<context>
+    <name>CMakeProjectManager::Internal::CMakeRunConfiguration</name>
     <message>
-        <source>CMake exited with errors. Please check CMake output.</source>
-        <translation>CMake завершился с ошибкой. Проверьте сообщения CMake.</translation>
+        <source>Run CMake kit</source>
+        <translation>Запуск комплекта CMake</translation>
     </message>
     <message>
-        <source>Arguments:</source>
-        <translation>Параметры:</translation>
+        <source>(disabled)</source>
+        <translation>(отключено)</translation>
     </message>
     <message>
-        <source>Generator:</source>
-        <translation>Генератор:</translation>
+        <source>The executable is not built by the current build configuration</source>
+        <translation>Приложение собрано не текущей конфигурацией сборки</translation>
     </message>
 </context>
 <context>
@@ -3537,10 +4027,6 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
         <source>Set as the default CMake Tool to use when creating a new kit or when no value is set.</source>
         <translation>Задание утилиты CMake по умолчанию, используемой при создании новых комплектов.</translation>
     </message>
-    <message>
-        <source>Prefer Ninja generator (CMake 2.8.9 or higher required)</source>
-        <translation>Предпочитать генератор Ninja (требуется CMake не ниже 2.8.9)</translation>
-    </message>
     <message>
         <source>Clone of %1</source>
         <translation>Копия %1</translation>
@@ -3551,220 +4037,381 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::GeneratorInfo</name>
-    <message>
-        <source>Ninja (%1)</source>
-        <translation>Ninja (%1)</translation>
-    </message>
+    <name>CPlusPlus::CheckSymbols</name>
     <message>
-        <source>NMake Generator (%1)</source>
-        <translation>Генератор для NMake (%1)</translation>
+        <source>Only virtual functions can be marked &apos;final&apos;</source>
+        <translation>Только виртуальные функции могут иметь атрибут «final»</translation>
     </message>
     <message>
-        <source>MinGW Generator (%1)</source>
-        <translation>Генератор для MinGW (%1)</translation>
+        <source>Expected a namespace-name</source>
+        <translation>Требуется название пространства имён</translation>
     </message>
     <message>
-        <source>Unix Generator (%1)</source>
-        <translation>Генератор для Unix (%1)</translation>
+        <source>Too many arguments</source>
+        <translation>Слишком много параметров</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::InSourceBuildPage</name>
+    <name>CPlusPlus::OverviewModel</name>
     <message>
-        <source>Qt Creator has detected an &lt;b&gt;in-source-build in %1&lt;/b&gt; which prevents shadow builds. Qt Creator will not allow you to change the build directory. If you want a shadow build, clean your source directory and re-open the project.</source>
-        <translation>Qt Creator обнаружил &lt;b&gt;сборку в каталоге с исходниками (%1)&lt;/b&gt;, что препятствует теневой сборке. Qt Creator не позволит изменить каталог сборки. Если требуется теневая сборка, необходимо очистить каталог исходников и открыть проект снова.</translation>
+        <source>&lt;Select Symbol&gt;</source>
+        <translation>&lt;Выберите символ&gt;</translation>
     </message>
     <message>
-        <source>Build Location</source>
-        <translation>Каталог сборки</translation>
+        <source>&lt;No Symbols&gt;</source>
+        <translation>&lt;Нет символов&gt;</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::MakeStep</name>
+    <name>CPlusplus::CheckSymbols</name>
     <message>
-        <source>Make</source>
-        <extracomment>Default display name for the cmake make step.</extracomment>
-        <translation>Сборка</translation>
+        <source>Only virtual functions can be marked &apos;override&apos;</source>
+        <translation>Только виртуальные функции могут иметь атрибут «override»</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::MakeStepConfigWidget</name>
+    <name>CategoryLabel</name>
     <message>
-        <source>Override command:</source>
-        <translation>Заменяющая команда:</translation>
+        <source>Collapse category</source>
+        <translation>Категория сворачивания</translation>
     </message>
     <message>
-        <source>Additional arguments:</source>
-        <translation>Дополнительные параметры:</translation>
+        <source>Expand category</source>
+        <translation>Категория разворачивания</translation>
     </message>
+</context>
+<context>
+    <name>CheckBoxSpecifics</name>
     <message>
-        <source>Targets:</source>
-        <translation>Цели:</translation>
+        <source>Check Box</source>
+        <translation>Флажок</translation>
     </message>
     <message>
-        <source>&lt;b&gt;No build configuration found on this kit.&lt;/b&gt;</source>
-        <translation>&lt;b&gt;Для этого комплекта отсутствует конфигурация сборки.&lt;/b&gt;</translation>
+        <source>Text</source>
+        <translation>Текст</translation>
     </message>
     <message>
-        <source>Make</source>
-        <comment>CMakeProjectManager::MakeStepConfigWidget display name.</comment>
-        <translation>Сборка</translation>
+        <source>Text shown on the check box.</source>
+        <translation>Текст, отображаемый у флажка.</translation>
+    </message>
+    <message>
+        <source>State of the check box.</source>
+        <translation>Состояние флажка.</translation>
+    </message>
+    <message>
+        <source>Checked</source>
+        <translation>Взведён</translation>
+    </message>
+    <message>
+        <source>Focus on press</source>
+        <translation>Фокус при нажатии</translation>
+    </message>
+    <message>
+        <source>Determines whether the check box gets focus if pressed.</source>
+        <translation>Определяет, получает ли флажок фокус при нажатии или нет.</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::MakeStepFactory</name>
+    <name>ClangCodeModel::Internal::ClangCompletionAssistProcessor</name>
     <message>
-        <source>Make</source>
-        <comment>Display name for CMakeProjectManager::MakeStep id.</comment>
-        <translation>Сборка</translation>
+        <source>Location: %1</source>
+        <extracomment>Parent folder for proposed #include completion</extracomment>
+        <translation>Находится в %1</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::NoCMakePage</name>
+    <name>ClangCodeModel::Internal::ClangProjectSettingsWidget</name>
+    <message>
+        <source>Warnings</source>
+        <translation>Предупреждения</translation>
+    </message>
     <message>
-        <source>Check CMake Tools</source>
-        <translation>Проверка утилит CMake</translation>
+        <source>Clang Code Model</source>
+        <translation>Модель кода Clang</translation>
     </message>
     <message>
-        <source>There are CMake Tools registered.</source>
-        <translation>Обнаружена утилита CMake.</translation>
+        <source>Global setting (%1)</source>
+        <translation>Глобальная настройка (%1)</translation>
     </message>
+</context>
+<context>
+    <name>ClangCodeModel::Internal::ModelManagerSupport</name>
     <message>
-        <source>Qt Creator has no CMake Tools that are required for CMake projects. Please configure at least one.</source>
-        <translation>У Qt Creator не настроены утилиты CMake, необходимые для сборки проектов на базе CMake. Настройте хотя бы одну.</translation>
+        <source>Clang</source>
+        <extracomment>Display name</extracomment>
+        <translation>Clang</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::NoKitPage</name>
+    <name>ClangDiagnosticConfigsModel</name>
+    <message>
+        <source>Warnings for questionable constructs</source>
+        <translation>Предупреждать о сомнительных конструкциях</translation>
+    </message>
     <message>
-        <source>Check Kits</source>
-        <translation>Проверить комплекты</translation>
+        <source>Pedantic Warnings</source>
+        <translation>Педантичные предупреждения</translation>
     </message>
     <message>
-        <source>There are compatible kits.</source>
-        <translation>Имеются совместимые комплекты.</translation>
+        <source>Warnings for almost everything</source>
+        <translation>Предупреждать обо всём</translation>
     </message>
     <message>
-        <source>Qt Creator has no kits that are suitable for CMake projects. Please configure a kit.</source>
-        <translation>У Qt Creator нет комплектов, подходящих для проектов CMake. Настройте комплект.</translation>
+        <source>%1 [built-in]</source>
+        <translation>%1 [встроенный]</translation>
     </message>
 </context>
 <context>
-    <name>CMakeProjectManager::Internal::ShadowBuildPage</name>
+    <name>ClangFormatSettings</name>
     <message>
-        <source>Please enter the directory in which you want to build your project.</source>
-        <translation>Укажите каталог, в котором желаете собирать проект.</translation>
+        <source>No description available.</source>
+        <translation>Описание недоступно.</translation>
     </message>
+</context>
+<context>
+    <name>ClangStaticAnalyzer</name>
     <message>
-        <source>Please enter the directory in which you want to build your project. Qt Creator recommends to not use the source directory for building. This ensures that the source directory remains clean and enables multiple builds with different settings.</source>
-        <translation>Укажите каталог, в котором желаете собирать проект. Qt Creator рекомендует не использовать каталог с исходниками для сборки. Это позволит поддерживать каталог с исходниками в чистоте, а также даст возможность делать несколько сборок с различными настройками.</translation>
+        <source>The chosen file &quot;%1&quot; seems to point to an icecc binary not suitable for analyzing.
+Please set a real clang executable.</source>
+        <translation>Кажется, выбранный файл «%1» указывает на программу icecc непригодную для анализа.
+Укажите реальную программу clang.</translation>
     </message>
+</context>
+<context>
+    <name>ClangStaticAnalyzer::Diagnostic</name>
     <message>
-        <source>Build directory:</source>
-        <translation>Каталог сборки:</translation>
+        <source>Category:</source>
+        <translation>Категория:</translation>
     </message>
     <message>
-        <source>Build Location</source>
-        <translation>Каталог сборки</translation>
+        <source>Type:</source>
+        <translation>Тип:</translation>
+    </message>
+    <message>
+        <source>Context:</source>
+        <translation>Контекст:</translation>
+    </message>
+    <message>
+        <source>Location:</source>
+        <translation>Размещение:</translation>
     </message>
 </context>
 <context>
-    <name>CPlusPlus::CheckSymbols</name>
+    <name>ClangStaticAnalyzer::ExplainingStep</name>
     <message>
-        <source>Only virtual functions can be marked &apos;final&apos;</source>
-        <translation>Только виртуальные функции могут иметь атрибут «final»</translation>
+        <source>Message:</source>
+        <translation>Сообщение:</translation>
     </message>
     <message>
-        <source>Expected a namespace-name</source>
-        <translation>Требуется название пространства имён</translation>
+        <source>Extended Message:</source>
+        <translation>Подробное сообщение:</translation>
     </message>
     <message>
-        <source>Too many arguments</source>
-        <translation>Слишком много параметров</translation>
+        <source>Location:</source>
+        <translation>Размещение:</translation>
     </message>
 </context>
 <context>
-    <name>CPlusPlus::OverviewModel</name>
+    <name>ClangStaticAnalyzer::Internal::ClangStaticAnalyzerConfigWidget</name>
     <message>
-        <source>&lt;Select Symbol&gt;</source>
-        <translation>&lt;Выберите символ&gt;</translation>
+        <source>Form</source>
+        <translation></translation>
     </message>
     <message>
-        <source>&lt;No Symbols&gt;</source>
-        <translation>&lt;Нет символов&gt;</translation>
+        <source>General</source>
+        <translation>Основное</translation>
+    </message>
+    <message>
+        <source>Clang executable:</source>
+        <translation>Исполняемый файл Clang:</translation>
+    </message>
+    <message>
+        <source>Simultaneous processes:</source>
+        <translation>Одновременных процессов:</translation>
+    </message>
+    <message>
+        <source>Clang Command</source>
+        <translation>Команда Clang</translation>
     </message>
 </context>
 <context>
-    <name>CPlusplus::CheckSymbols</name>
+    <name>ClangStaticAnalyzer::Internal::ClangStaticAnalyzerDiagnosticModel</name>
     <message>
-        <source>Only virtual functions can be marked &apos;override&apos;</source>
-        <translation>Только виртуальные функции могут иметь атрибут «override»</translation>
+        <source>Issue</source>
+        <translation>Проблема</translation>
+    </message>
+    <message>
+        <source>Location</source>
+        <translation>Размещение</translation>
     </message>
 </context>
 <context>
-    <name>CategoryLabel</name>
+    <name>ClangStaticAnalyzer::Internal::ClangStaticAnalyzerDiagnosticView</name>
     <message>
-        <source>Collapse category</source>
-        <translation>Категория сворачивания</translation>
+        <source>Suppress this diagnostic</source>
+        <translation>Подавить эту диагностику</translation>
     </message>
+</context>
+<context>
+    <name>ClangStaticAnalyzer::Internal::ClangStaticAnalyzerOptionsPage</name>
     <message>
-        <source>Expand category</source>
-        <translation>Категория разворачивания</translation>
+        <source>Clang Static Analyzer</source>
+        <translation>Статический анализатор Clang</translation>
     </message>
 </context>
 <context>
-    <name>CheckBoxSpecifics</name>
+    <name>ClangStaticAnalyzer::Internal::ClangStaticAnalyzerPlugin</name>
     <message>
-        <source>Check Box</source>
-        <translation>Флажок</translation>
+        <source>Clang Static Analyzer Settings</source>
+        <translation>Настройки статического анализатора Clang</translation>
     </message>
+</context>
+<context>
+    <name>ClangStaticAnalyzer::Internal::ClangStaticAnalyzerRunControl</name>
     <message>
-        <source>Text</source>
-        <translation>Текст</translation>
+        <source>Running Clang Static Analyzer on %1</source>
+        <translation>Выполнения статического анализа Clang для %1</translation>
     </message>
     <message>
-        <source>Text shown on the check box.</source>
-        <translation>Текст, отображаемый у флажка.</translation>
+        <source>Clang Static Analyzer: Invalid executable &quot;%1&quot;, stop.</source>
+        <translation>Статический анализатор Clang: Неверная программа «%1», остановлено.</translation>
     </message>
     <message>
-        <source>State of the check box.</source>
-        <translation>Состояние флажка.</translation>
+        <source>Clang Static Analyzer: Failed to create temporary dir, stop.</source>
+        <translation>Статический анализатор Clang: Не удалось создать временный каталог, остановлено.</translation>
     </message>
     <message>
-        <source>Checked</source>
-        <translation>Взведён</translation>
+        <source>Analyzing</source>
+        <translation>Анализ</translation>
     </message>
     <message>
-        <source>Focus on press</source>
-        <translation>Фокус при нажатии</translation>
+        <source>Clang Static Analyzer stopped by user.</source>
+        <translation>Статический анализатор Clang остановлен пользователем.</translation>
     </message>
     <message>
-        <source>Determines whether the check box gets focus if pressed.</source>
-        <translation>Определяет, получает ли флажок фокус при нажатии или нет.</translation>
+        <source>Analyzing &quot;%1&quot;.</source>
+        <translation>Анализ «%1».</translation>
+    </message>
+    <message>
+        <source>Failed to analyze &quot;%1&quot;: %2</source>
+        <translation>Не удалось проанализировать «%1»: %2</translation>
+    </message>
+    <message>
+        <source>Clang Static Analyzer finished: Processed %1 files successfully, %2 failed.</source>
+        <translation>Работа статического анализатора Clang завершена: Успешно обработано %1 файлов и %2 не удалось.</translation>
+    </message>
+    <message>
+        <source>Clang Static Analyzer: Not all files could be analyzed.</source>
+        <translation>Статический анализатор Clang: Не все файлы удалось проанализовать.</translation>
     </message>
 </context>
 <context>
-    <name>ClangCodeModel::Internal::ClangCompletionAssistProcessor</name>
+    <name>ClangStaticAnalyzer::Internal::ClangStaticAnalyzerRunControlFactory</name>
     <message>
-        <source>Location: %1</source>
-        <extracomment>Parent folder for proposed #include completion</extracomment>
-        <translation>Находится в %1</translation>
+        <source>The project configuration changed since the start of the Clang Static Analyzer. Please re-run with current configuration.</source>
+        <translation>Конфигурация проекта изменилась с момента запуска статического анализатора Clang. Перезапустите его.</translation>
     </message>
 </context>
 <context>
-    <name>ClangCodeModel::Internal::ModelManagerSupport</name>
+    <name>ClangStaticAnalyzer::Internal::ClangStaticAnalyzerTool</name>
     <message>
-        <source>Clang</source>
-        <extracomment>Display name</extracomment>
-        <translation>Clang</translation>
+        <source>Clang Static Analyzer Issues</source>
+        <translatorcomment>Если перевести буквально, то будет очень длинно</translatorcomment>
+        <translation>Статический анализатор Clang</translation>
+    </message>
+    <message>
+        <source>Go to previous bug.</source>
+        <translation>К предыдущей проблеме.</translation>
+    </message>
+    <message>
+        <source>Go to next bug.</source>
+        <translation>К следующей проблеме.</translation>
+    </message>
+    <message>
+        <source>Clang Static Analyzer uses the analyzer from the clang project to find bugs.</source>
+        <translation>Статический анализатор Clang использует анализатор из проекта clang для поиска проблем.</translation>
+    </message>
+    <message>
+        <source>Clang Static Analyzer</source>
+        <translation>Статический анализатор Clang</translation>
+    </message>
+    <message>
+        <source>Release</source>
+        <translation>Выпуск</translation>
+    </message>
+    <message>
+        <source>Run %1 in %2 Mode?</source>
+        <translation>Выполнить %1 в режиме %2?</translation>
+    </message>
+    <message>
+        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;You are trying to run the tool &quot;%1&quot; on an application in %2 mode. The tool is designed to be used in Debug mode since enabled assertions can reduce the number of false positives.&lt;/p&gt;&lt;p&gt;Do you want to continue and run the tool in %2 mode?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Вы пытаетесь запустить «%1» для приложения в режиме %2. Этот инструмент разработан для использования в отладочном режиме, так как включённые утверждения могут уменьшить число ложных срабатываний.&lt;/p&gt;&lt;p&gt;Продолжить запуск в режиме %2?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+    </message>
+    <message>
+        <source>Clang Static Analyzer is still running.</source>
+        <translation>Статический анализатор Clang ещё работает.</translation>
+    </message>
+    <message>
+        <source>Start Clang Static Analyzer.</source>
+        <translation>Запустить статический анализатор Clang.</translation>
+    </message>
+    <message>
+        <source>Clang Static Analyzer running.</source>
+        <translation>Статический анализатор Clang работает.</translation>
+    </message>
+    <message>
+        <source>Clang Static Analyzer finished.</source>
+        <translation>Статический анализ Clang завершён.</translation>
+    </message>
+    <message>
+        <source>No issues found.</source>
+        <translation>Проблем не найдено.</translation>
+    </message>
+    <message numerus="yes">
+        <source>%n issues found (%1 suppressed).</source>
+        <translation>
+            <numerusform>найдена %n проблема (%1 подавлено).</numerusform>
+            <numerusform>найдено %n проблемы (%1 подавлено).</numerusform>
+            <numerusform>найдено %n проблем (%1 подавлено).</numerusform>
+        </translation>
     </message>
 </context>
 <context>
-    <name>ClangFormatSettings</name>
+    <name>ClangStaticAnalyzer::Internal::ProjectSettingsWidget</name>
     <message>
-        <source>No description available.</source>
-        <translation>Описание недоступно.</translation>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>Suppressed Diagnostics:</source>
+        <translation>Подавляемые диагностики:</translation>
+    </message>
+    <message>
+        <source>Remove Selected</source>
+        <translation>Удалить выбранное</translation>
+    </message>
+    <message>
+        <source>Remove All</source>
+        <translation>Удалить всё</translation>
+    </message>
+</context>
+<context>
+    <name>ClangStaticAnalyzer::Internal::SuppressedDiagnosticsModel</name>
+    <message>
+        <source>File</source>
+        <translation>Файл</translation>
+    </message>
+    <message>
+        <source>Context</source>
+        <translation>Контекст</translation>
+    </message>
+    <message>
+        <source>Diagnostic</source>
+        <translation>Диагностика</translation>
+    </message>
+    <message>
+        <source>Function &quot;%1&quot;</source>
+        <translation>Функция «%1»</translation>
     </message>
 </context>
 <context>
@@ -4191,7 +4838,7 @@ For example, &quot;Revision: 15&quot; will leave the branch at revision 15.</sou
     </message>
     <message>
         <source>&amp;Timeout:</source>
-        <translation>В&amp;ремя ожидания:</translation>
+        <translation>Та&amp;ймаут:</translation>
     </message>
     <message>
         <source>s</source>
@@ -5014,6 +5661,22 @@ Continue?</source>
         <source>Opening File</source>
         <translation>Открытие файла</translation>
     </message>
+    <message>
+        <source>Split</source>
+        <translation>Разделить</translation>
+    </message>
+    <message>
+        <source>Split Side by Side</source>
+        <translation>Разделить вертикально</translation>
+    </message>
+    <message>
+        <source>Open in New Window</source>
+        <translation>Открыть в новом окне</translation>
+    </message>
+    <message>
+        <source>Close Document</source>
+        <translation>Закрыть документ</translation>
+    </message>
 </context>
 <context>
     <name>Core::EditorToolBar</name>
@@ -5351,6 +6014,10 @@ Continue?</source>
         <source>The current time (QTime formatstring).</source>
         <translation>Текущее время (строка форматирования QTime).</translation>
     </message>
+    <message>
+        <source>Generate a new UUID.</source>
+        <translation>Создать новый UUID.</translation>
+    </message>
     <message>
         <source>A comment.</source>
         <translation>Комментарий.</translation>
@@ -5552,6 +6219,18 @@ To do this, you type this shortcut and a space in the Locator entry field, and t
         <source>Ctrl+E,1</source>
         <translation>Ctrl+E,1</translation>
     </message>
+    <message>
+        <source>Go to Previous Split or Window</source>
+        <translation>Перейти к предыдущему разделению или окну</translation>
+    </message>
+    <message>
+        <source>Meta+E,i</source>
+        <translation>Meta+E,i</translation>
+    </message>
+    <message>
+        <source>Ctrl+E,i</source>
+        <translation>Ctrl+E,i</translation>
+    </message>
     <message>
         <source>Go to Next Split or Window</source>
         <translation>Перейти к следующему разделению или окну</translation>
@@ -6127,10 +6806,6 @@ Do you want to kill it?</source>
         <source>Find:</source>
         <translation>Искать:</translation>
     </message>
-    <message>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
     <message>
         <source>Replace with:</source>
         <translation>Заменить на:</translation>
@@ -6159,12 +6834,12 @@ Do you want to kill it?</source>
         <translation>&lt;Системный&gt;</translation>
     </message>
     <message>
-        <source>Interface</source>
-        <translation>Интерфейс</translation>
+        <source>Restart Required</source>
+        <translation>Требуется перезапуск</translation>
     </message>
     <message>
-        <source>Restart required</source>
-        <translation>Требуется перезапуск</translation>
+        <source>Interface</source>
+        <translation>Интерфейс</translation>
     </message>
     <message>
         <source>The language change will take effect after a restart of Qt Creator.</source>
@@ -6814,6 +7489,14 @@ Do you want to kill it?</source>
         <source>Previous Item</source>
         <translation>Предыдущий</translation>
     </message>
+    <message>
+        <source>Ctrl+Shift+9</source>
+        <translation>Ctrl+Shift+9</translation>
+    </message>
+    <message>
+        <source>Alt+Shift+9</source>
+        <translation>Alt+Shift+9</translation>
+    </message>
     <message>
         <source>Maximize Output Pane</source>
         <translation>Развернуть панель вывода</translation>
@@ -6830,14 +7513,6 @@ Do you want to kill it?</source>
         <source>F6</source>
         <translation>F6</translation>
     </message>
-    <message>
-        <source>Ctrl+9</source>
-        <translation>Ctrl+9</translation>
-    </message>
-    <message>
-        <source>Alt+9</source>
-        <translation>Alt+9</translation>
-    </message>
     <message>
         <source>Minimize Output Pane</source>
         <translation>Свернуть панель вывода</translation>
@@ -7193,10 +7868,6 @@ Do you want to kill it?</source>
         <comment>Terminal</comment>
         <translation>Сбросить в исходное состояние.</translation>
     </message>
-    <message>
-        <source>&lt;html&gt;Influences how file names are matched to decide if they are the same.</source>
-        <translation>&lt;html&gt;Определяет, как сравнивать похожие именя файлов.</translation>
-    </message>
     <message>
         <source>File system case sensitivity:</source>
         <translatorcomment>Будет: &quot;При стравнении имён файлов: учитывать регистр&quot;</translatorcomment>
@@ -7226,124 +7897,20 @@ Do you want to kill it?</source>
         <source>Variables</source>
         <translation>Переменные</translation>
     </message>
-</context>
-<context>
-    <name>Core::Internal::ThemeEditor::ThemeEditorWidget</name>
-    <message>
-        <source>Theme Editor</source>
-        <translation>Редактор тем</translation>
-    </message>
-    <message>
-        <source>Filter:</source>
-        <translation>Фильтр:</translation>
-    </message>
-</context>
-<context>
-    <name>Core::Internal::ThemeEditor::ThemeSettingsItemDelegate</name>
-    <message>
-        <source>&lt;Unnamed&gt; (Current)</source>
-        <translation>&lt;Без имени&gt; (текущая)</translation>
-    </message>
-    <message>
-        <source> (Current)</source>
-        <translation> (текущая)</translation>
-    </message>
-    <message>
-        <source>Remove Variable Name</source>
-        <translation>Удалить имя переменной</translation>
-    </message>
-    <message>
-        <source>Add Variable Name...</source>
-        <translation>Добавить имя переменной...</translation>
-    </message>
-    <message>
-        <source>Variable name:</source>
-        <translation>Имя переменной:</translation>
-    </message>
-    <message>
-        <source>Add Variable Name</source>
-        <translation>Добавление имени переменной</translation>
-    </message>
-</context>
-<context>
-    <name>Core::Internal::ThemeEditor::ThemeSettingsTableModel</name>
-    <message>
-        <source>Widget Style</source>
-        <translation>Стиль виджета</translation>
-    </message>
-    <message>
-        <source>Colors</source>
-        <translation>Цвета</translation>
-    </message>
-    <message>
-        <source>Flags</source>
-        <translation>Флаги</translation>
-    </message>
-    <message>
-        <source>Role</source>
-        <translation>Роль</translation>
-    </message>
     <message>
-        <source>Value</source>
-        <translation>Значение</translation>
+        <source>Influences how file names are matched to decide if they are the same.</source>
+        <translation>Определяет способ сравнения имён файлов.</translation>
     </message>
 </context>
 <context>
-    <name>Core::Internal::ThemeSettings</name>
-    <message>
-        <source>Rename...</source>
-        <translation>Переименовать...</translation>
-    </message>
-    <message>
-        <source>Copy...</source>
-        <translation>Копировать...</translation>
-    </message>
-    <message>
-        <source>Delete</source>
-        <translation>Удалить</translation>
-    </message>
-    <message>
-        <source>Theme</source>
-        <translation>Тема</translation>
-    </message>
-</context>
-<context>
-    <name>Core::Internal::ThemeSettingsWidget</name>
-    <message>
-        <source>Delete Theme</source>
-        <translation>Удаление темы</translation>
-    </message>
-    <message>
-        <source>Are you sure you want to delete the theme &quot;%1&quot; permanently?</source>
-        <translation>Удалить тему «%1» навсегда?</translation>
-    </message>
-    <message>
-        <source>Delete</source>
-        <translation>Удалить</translation>
-    </message>
-    <message>
-        <source>Copy Theme</source>
-        <translation>Копирование темы</translation>
-    </message>
-    <message>
-        <source>Theme name:</source>
-        <translation>Имя темы:</translation>
-    </message>
-    <message>
-        <source>Theme Changed</source>
-        <translation>Тема изменена</translation>
-    </message>
+    <name>Core::Internal::ThemeChooser</name>
     <message>
-        <source>The theme &quot;%1&quot; was modified, do you want to save the changes?</source>
-        <translation>Тема «%1» была изменена, сохранить изменения?</translation>
-    </message>
-    <message>
-        <source>Discard</source>
-        <translation>Отказаться</translation>
+        <source>Restart Required</source>
+        <translation>Требуется перезапуск</translation>
     </message>
     <message>
-        <source>Rename Theme</source>
-        <translation>Переименование темы</translation>
+        <source>The theme change will take effect after a restart of Qt Creator.</source>
+        <translation>Изменение темы вступит в силу только после перезапуска Qt Creator.</translation>
     </message>
 </context>
 <context>
@@ -8036,6 +8603,41 @@ to version control (%2)
         <translation>Имя класса.</translation>
     </message>
 </context>
+<context>
+    <name>CppTools::ClangDiagnosticConfigsWidget</name>
+    <message>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>Configuration to use:</source>
+        <translation>Использовать конфигурацию:</translation>
+    </message>
+    <message>
+        <source>Copy...</source>
+        <translation>Копировать...</translation>
+    </message>
+    <message>
+        <source>Remove</source>
+        <translation>Удалить</translation>
+    </message>
+    <message>
+        <source>For appropriate options, consult the GCC or Clang manual pages or the &lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html&quot;&gt;GCC online documentation&lt;/a&gt;.</source>
+        <translation>Описание параметров можно найти страницах man GCC или Clang или в &lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html&quot;&gt;Документации GCC&lt;/a&gt;.</translation>
+    </message>
+    <message>
+        <source>Copy Diagnostic Configuration</source>
+        <translation>Копирование конфигурации диагностики</translation>
+    </message>
+    <message>
+        <source>Diagnostic configuration name:</source>
+        <translation>Имя конфигурации диагностики:</translation>
+    </message>
+    <message>
+        <source>%1 (Copy)</source>
+        <translation>%1 (копия)</translation>
+    </message>
+</context>
 <context>
     <name>CppTools::CppClassesFilter</name>
     <message>
@@ -8189,7 +8791,7 @@ In addition, Shift+Enter inserts an escape character at the cursor position and
     </message>
     <message>
         <source>Timeout in ms:</source>
-        <translation>Время ожидания в мс:</translation>
+        <translation>Таймаут в мс:</translation>
     </message>
 </context>
 <context>
@@ -8215,16 +8817,8 @@ In addition, Shift+Enter inserts an escape character at the cursor position and
         <translation>&lt;i&gt;Включите модуль Clang Code Model, чтобы менять настройки.&lt;/i&gt;</translation>
     </message>
     <message>
-        <source>Use Clang Code Model</source>
-        <translation>Использовать модель кода Clang</translation>
-    </message>
-    <message>
-        <source>Append additional command line options to Clang, one per line. &lt;i&gt;Use this with care.&lt;/i&gt;</source>
-        <translation>Дополнительные параметры командной строки Clang, по одной на строке.&lt;br&gt;&lt;i&gt;Используйте их с осторожностью.&lt;/i&gt;</translation>
-    </message>
-    <message>
-        <source>Reset Options</source>
-        <translation>Сбросить</translation>
+        <source>Clang Code Model Warnings</source>
+        <translation>Предупреждения модели кода Clang</translation>
     </message>
 </context>
 <context>
@@ -9224,7 +9818,7 @@ Flags: %3</source>
     </message>
     <message>
         <source>Timeout:</source>
-        <translation>Время ожидания:</translation>
+        <translation>Таймаут:</translation>
     </message>
     <message>
         <source>s</source>
@@ -9254,6 +9848,29 @@ Flags: %3</source>
         <translation>Команда CVS</translation>
     </message>
 </context>
+<context>
+    <name>DebugMessagesModel</name>
+    <message>
+        <source>Debug Message</source>
+        <translation>Отладочное сообщение</translation>
+    </message>
+    <message>
+        <source>Warning Message</source>
+        <translation>Предупреждающее сообщение</translation>
+    </message>
+    <message>
+        <source>Critical Message</source>
+        <translation>Критическое сообщение</translation>
+    </message>
+    <message>
+        <source>Fatal Message</source>
+        <translation>Фатальное сообщение</translation>
+    </message>
+    <message>
+        <source>Info Message</source>
+        <translation>Информационное сообщение</translation>
+    </message>
+</context>
 <context>
     <name>Debugger</name>
     <message>
@@ -9278,6 +9895,64 @@ Flags: %3</source>
         <translation>Ctrl+Shift+F11</translation>
     </message>
 </context>
+<context>
+    <name>Debugger::AnalyzerAction</name>
+    <message>
+        <source>Cannot start %1 without a project. Please open the project and try again.</source>
+        <translation>Невозможно запустить %1 без проекта. Откройте проект и попробуйте снова.</translation>
+    </message>
+    <message>
+        <source>Debug</source>
+        <translation>отладки</translation>
+    </message>
+    <message>
+        <source>Profile</source>
+        <translation>профилирования</translation>
+    </message>
+    <message>
+        <source>Release</source>
+        <translation>выпуска</translation>
+    </message>
+    <message>
+        <source>in Debug mode</source>
+        <translation>она создана для режима отладки</translation>
+    </message>
+    <message>
+        <source>in Profile mode</source>
+        <translation>она создана для режима профилирования</translation>
+    </message>
+    <message>
+        <source>in Release mode</source>
+        <translation>она создана для режима выпуска</translation>
+    </message>
+    <message>
+        <source>with debug symbols (Debug or Profile mode)</source>
+        <translation>ей требуются отладочные символы (отладка или профилирование)</translation>
+    </message>
+    <message>
+        <source>on optimized code (Profile or Release mode)</source>
+        <translation>ей требуется оптимизированный код (профилирование или выпуск)</translation>
+    </message>
+    <message>
+        <source>Run %1 in %2 Mode?</source>
+        <translation>Выполнить %1 в режиме %2?</translation>
+    </message>
+    <message>
+        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;You are trying to run the tool &quot;%1&quot; on an application in %2 mode. The tool is designed to be used %3.&lt;/p&gt;&lt;p&gt;Run-time characteristics differ significantly between optimized and non-optimized binaries. Analytical findings for one mode may or may not be relevant for the other.&lt;/p&gt;&lt;p&gt;Running tools that need debug symbols on binaries that don&apos;t provide any may lead to missing function names or otherwise insufficient output.&lt;/p&gt;&lt;p&gt;Do you want to continue and run the tool in %2 mode?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Вы пытаетесь запустить утилиту «%1» для приложения в режиме %2, а %3.&lt;/p&gt;&lt;p&gt;Характер работы приложения сильно зависит от оптимизации. Выводы, сделанные для одного режима, могут быть неверны для другого.&lt;/p&gt;&lt;p&gt;Запуск утилиты требующей отладочные символы для программ их не имеющих приведёт к проблемам определения имён функций или некорректному выводу информации.&lt;/p&gt;&lt;p&gt;Запустить утилиту в режиме %2?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>Debugger::AnalyzerRunConfigWidget</name>
+    <message>
+        <source>Use Customized Settings</source>
+        <translation>Используются особые настройки</translation>
+    </message>
+    <message>
+        <source>Use Global Settings</source>
+        <translation>Используются глобальные настройки</translation>
+    </message>
+</context>
 <context>
     <name>Debugger::DebuggerItemManager</name>
     <message>
@@ -9356,21 +10031,6 @@ Flags: %3</source>
         <source>Debugger</source>
         <translation>Отладчик</translation>
     </message>
-    <message>
-        <source>No kit found.</source>
-        <translation>Комплект не найден.</translation>
-    </message>
-</context>
-<context>
-    <name>Debugger::DebuggerMainWindow</name>
-    <message>
-        <source>Memory...</source>
-        <translation>Память...</translation>
-    </message>
-    <message>
-        <source>Debugger Toolbar</source>
-        <translation>Панель отладчика</translation>
-    </message>
 </context>
 <context>
     <name>Debugger::DebuggerOptionsPage</name>
@@ -9506,6 +10166,13 @@ Flags: %3</source>
         <translation>Закрытие сессии отладки</translation>
     </message>
 </context>
+<context>
+    <name>Debugger::DetailedErrorView</name>
+    <message>
+        <source>Copy</source>
+        <translation>Копировать</translation>
+    </message>
+</context>
 <context>
     <name>Debugger::Internal::AddressDialog</name>
     <message>
@@ -10419,6 +11086,44 @@ Flags: %3</source>
         <translation>&lt;бесконечна&gt;</translation>
     </message>
 </context>
+<context>
+    <name>Debugger::Internal::Console</name>
+    <message>
+        <source>Show debug, log, and info messages.</source>
+        <translation>Показывать сообщения уровней: отладка, журнал и информация.</translation>
+    </message>
+    <message>
+        <source>Show warning messages.</source>
+        <translation>Показывать предупреждения.</translation>
+    </message>
+    <message>
+        <source>Show error messages.</source>
+        <translation>Показывать сообщения об ошибках.</translation>
+    </message>
+    <message>
+        <source>Can only evaluate during a debug session.</source>
+        <translation>Вычислится только при отладке.</translation>
+    </message>
+    <message>
+        <source>Debugger Console</source>
+        <translation>Консоль отладчика</translation>
+    </message>
+</context>
+<context>
+    <name>Debugger::Internal::ConsoleView</name>
+    <message>
+        <source>&amp;Copy</source>
+        <translation>&amp;Копировать</translation>
+    </message>
+    <message>
+        <source>&amp;Show in Editor</source>
+        <translation>&amp;Показать в редакторе</translation>
+    </message>
+    <message>
+        <source>C&amp;lear</source>
+        <translation>&amp;Очистить</translation>
+    </message>
+</context>
 <context>
     <name>Debugger::Internal::DebuggerEngine</name>
     <message>
@@ -10511,6 +11216,18 @@ Flags: %3</source>
         <source>Exception Triggered</source>
         <translation>Возникло исключение</translation>
     </message>
+    <message>
+        <source>The inferior is in the Portable Executable format.
+Selecting CDB as debugger would improve the debugging experience for this binary format.</source>
+        <translation>Программа имеет формат Portable Executable.
+Рекомендуется использовать отладчик CDB для улучшения отладочных возможностей.</translation>
+    </message>
+    <message>
+        <source>The inferior is in the ELF format.
+Selecting GDB or LLDB as debugger would improve the debugging experience for this binary format.</source>
+        <translation>Программа имеет формает ELF.
+Рекомендуется использовать отладчик GDB или LLDB для улучшения отладочных возможностей.</translation>
+    </message>
     <message>
         <source>Found.</source>
         <translation>Найдена.</translation>
@@ -10527,6 +11244,14 @@ Flags: %3</source>
         <source>Warning</source>
         <translation>Предупреждение</translation>
     </message>
+    <message>
+        <source>The selected debugger may be inappropiate for the inferior.
+Examining symbols and setting breakpoints by file name and line number may fail.
+</source>
+        <translation>Выбранный отладчик возможно не подходит для отлаживаемой программы.
+Обзор символов и установка точек останова по имени файла и строке может не работать.
+</translation>
+    </message>
     <message>
         <source>This does not seem to be a &quot;Debug&quot; build.
 Setting breakpoints by file name and line number may fail.</source>
@@ -10657,6 +11382,11 @@ Setting breakpoints by file name and line number may fail.</source>
         <source>Sections in &quot;%1&quot;</source>
         <translation>Секции в «%1»</translation>
     </message>
+    <message>
+        <source>Debugger</source>
+        <extracomment>Category under which Analyzer tasks are listed in Issues view</extracomment>
+        <translation>Отладчик</translation>
+    </message>
     <message>
         <source>Some breakpoints cannot be handled by the debugger languages currently active, and will be ignored.
 Affected are breakpoints %1</source>
@@ -10675,6 +11405,14 @@ Affected are breakpoints %1</source>
         <source>Unable to create a debugger engine of the type &quot;%1&quot;</source>
         <translation>Не удалось создать отладчик типа «%1»</translation>
     </message>
+    <message>
+        <source>Install &amp;Debug Information</source>
+        <translation>Установить &amp;отладочную информацию</translation>
+    </message>
+    <message>
+        <source>Tries to install missing debug information.</source>
+        <translation>Попытка установить отсутствующую отладочную информацию.</translation>
+    </message>
 </context>
 <context>
     <name>Debugger::Internal::DebuggerPluginPrivate</name>
@@ -10894,6 +11632,10 @@ Qt Creator не может подключиться к нему.</translation>
         <source>Debugger Runtime</source>
         <translation>Программа отладчика</translation>
     </message>
+    <message>
+        <source>Debugger</source>
+        <translation>Отладчик</translation>
+    </message>
     <message>
         <source>Cannot attach to process with PID 0</source>
         <translation>Невозможно подключиться к процессу с PID равным 0</translation>
@@ -10978,6 +11720,14 @@ Qt Creator не может подключиться к нему.</translation>
         <source>Breakpoints</source>
         <translation>Точки останова</translation>
     </message>
+    <message>
+        <source>&amp;Analyze</source>
+        <translation>&amp;Анализ</translation>
+    </message>
+    <message>
+        <source>Memory...</source>
+        <translation>Память...</translation>
+    </message>
     <message>
         <source>Modules</source>
         <translation>Модули</translation>
@@ -11093,10 +11843,6 @@ Qt Creator не может подключиться к нему.</translation>
 </context>
 <context>
     <name>Debugger::Internal::DebuggerSettings</name>
-    <message>
-        <source>Verbose Log</source>
-        <translation>Расширенное журналирование</translation>
-    </message>
     <message>
         <source>Use Alternating Row Colors</source>
         <translation>Использовать чередующиеся цвета строк</translation>
@@ -11129,10 +11875,6 @@ Qt Creator не может подключиться к нему.</translation>
         <source>Dereference Pointers Automatically</source>
         <translation>Автоматически разыменовывать указатели</translation>
     </message>
-    <message>
-        <source>&lt;p&gt;This switches the Locals&amp;&amp;Watchers view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source>
-        <translation>&lt;p&gt;Переключает обзор переменных в режим автоматического разыменования указателей. Позволяет сохранить уровень древовидного отображения, но при этом недоступны данные промежуточного уровня.</translation>
-    </message>
     <message>
         <source>Show &quot;std::&quot; Namespace in Types</source>
         <translation>Показывать пространство имён «std::» в типах</translation>
@@ -11157,6 +11899,14 @@ Qt Creator не может подключиться к нему.</translation>
         <source>&lt;p&gt;Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with &quot;-qtnamespace&quot;.</source>
         <translation>&lt;p&gt;Отображать приставку пространтсва имён Qt для типов Qt. Имеет смысл только тогда, когда Qt собран с параметром «-qtnamespace».</translation>
     </message>
+    <message>
+        <source>Show QObject names if available</source>
+        <translation>Показывать доступные имена QObject</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source>
+        <translation>&lt;p&gt;Отображает свойство objectName производных от QObject объектов. Может негативно сказаться на скорости работы отладчика даже если нет подобных объектов.</translation>
+    </message>
     <message>
         <source>Sort Members of Classes and Structs Alphabetically</source>
         <translation>Сортировать члены классов и структур по алфавиту</translation>
@@ -11213,6 +11963,10 @@ Qt Creator не может подключиться к нему.</translation>
         <source>Synchronize Breakpoints</source>
         <translation>Согласовывать точки останова</translation>
     </message>
+    <message>
+        <source>&lt;p&gt;This switches the Locals and Expressions view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level.</source>
+        <translation>&lt;p&gt;Переключает обзор Переменных и выражений в режим автоматического разыменовывания указателей. Позволяет сократить размер дерева, но при этом теряются данные промежуточного уровня.</translation>
+    </message>
     <message>
         <source>Adjust Breakpoint Locations</source>
         <translation>Подстраивать размещение точек останова</translation>
@@ -11473,6 +12227,10 @@ Qt Creator не может подключиться к нему.</translation>
         <source>Attach to core &quot;%1&quot; failed:</source>
         <translation>Не удалось подключиться к дампу «%1»:</translation>
     </message>
+    <message>
+        <source>Continuing nevertheless.</source>
+        <translation>Всё же продолжаем.</translation>
+    </message>
 </context>
 <context>
     <name>Debugger::Internal::GdbEngine</name>
@@ -11722,6 +12480,10 @@ You can choose between waiting longer or aborting debugging.</source>
         <source>Value changed from %1 to %2.</source>
         <translation>Значение изменилось с %1 на %2.</translation>
     </message>
+    <message>
+        <source>The selected build of GDB supports Python scripting, but the used version %1.%2 is not sufficient for Qt Creator. Supported versions are Python 2.7 and 3.x.</source>
+        <translation>Выбранная сборка GDB поддерживает сценарии Python, но версия Python %1.%2 не подходит Qt Creator. Поддерживается Python версий 2.7 и 3.x.</translation>
+    </message>
     <message>
         <source>Execution Error</source>
         <translation>Ошибка выполнения</translation>
@@ -11807,7 +12569,7 @@ You can choose between waiting longer or aborting debugging.</source>
     </message>
     <message>
         <source>GDB timeout:</source>
-        <translation>Время ожидания ответа GDB:</translation>
+        <translation>Таймаут ответа GDB:</translation>
     </message>
     <message>
         <source>The number of seconds Qt Creator will wait before it terminates
@@ -12505,12 +13267,6 @@ Stepping into the module or setting breakpoints by file and line is expected to
 Do you want to retry?</source>
         <translation>Не удалось подключиться к внутрипроцессному отладчику QML.
 Повторить?</translation>
-    </message>
-    <message>
-        <source>Could not connect to the in-process QML debugger.
-%1</source>
-        <translation>Не удалось подключиться к внутрипроцессному отладчику QML.
-%1</translation>
     </message>
     <message>
         <source>QML Debugger: Remote host closed connection.</source>
@@ -12520,6 +13276,10 @@ Do you want to retry?</source>
         <source>JS Source for %1</source>
         <translation>Исходник JS для %1</translation>
     </message>
+    <message>
+        <source>Could not connect to the in-process QML debugger. %1</source>
+        <translation>Не удалось подключиться к внутрипроцессному отладчику QML. %1</translation>
+    </message>
     <message>
         <source>Starting %1 %2</source>
         <translation>Запускается %1 %2</translation>
@@ -12587,7 +13347,7 @@ Do you want to retry?</source>
         <translation>В виде %1-битных двоичных целых</translation>
     </message>
     <message>
-        <source>Contents as %1-bit Floating Point Values</source>
+        <source>Content as %1-bit Floating Point Values</source>
         <translation>В виде %1-битных действительных</translation>
     </message>
     <message>
@@ -13176,6 +13936,10 @@ Do you want to retry?</source>
         <source>Attach to Process Not Yet Started</source>
         <translation>Подключение процессу ещё не началось</translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation>Сбросить</translation>
+    </message>
     <message>
         <source>Reopen dialog when application finishes</source>
         <translation>Открыть диалог при завершении приложения</translation>
@@ -13221,19 +13985,6 @@ Do you want to retry?</source>
         <translation>Подключить</translation>
     </message>
 </context>
-<context>
-    <name>Debugger::Internal::WatchData</name>
-    <message>
-        <source>&lt;not in scope&gt;</source>
-        <extracomment>Value of variable in Debugger Locals display for variables out of scope (stopped above initialization).</extracomment>
-        <translation>&lt;вне области&gt;</translation>
-    </message>
-    <message>
-        <source>%1 &lt;shadowed %2&gt;</source>
-        <extracomment>Display of variables shadowed by variables of the same name in nested scopes: Variable %1 is the variable name, %2 is a simple count.</extracomment>
-        <translation>%1 &lt;затеняет %2&gt;</translation>
-    </message>
-</context>
 <context>
     <name>Debugger::Internal::WatchHandler</name>
     <message>
@@ -13244,10 +13995,6 @@ Do you want to retry?</source>
         <source>Internal Type</source>
         <translation>Внутренний тип</translation>
     </message>
-    <message>
-        <source>Displayed Type</source>
-        <translation>Отображаемый тип</translation>
-    </message>
     <message>
         <source>... &lt;cut off&gt;</source>
         <translation>... &lt;обрезано&gt;</translation>
@@ -13264,6 +14011,10 @@ Do you want to retry?</source>
         <source>Pointer Address</source>
         <translation>Адрес указателя</translation>
     </message>
+    <message>
+        <source>Array Index</source>
+        <translation>Индекс массива</translation>
+    </message>
     <message>
         <source>Static Object Size</source>
         <translation>Размер статического объекта</translation>
@@ -13341,6 +14092,19 @@ Do you want to retry?</source>
         <translation>Имя</translation>
     </message>
 </context>
+<context>
+    <name>Debugger::Internal::WatchItem</name>
+    <message>
+        <source>&lt;not in scope&gt;</source>
+        <extracomment>Value of variable in Debugger Locals display for variables out of scope (stopped above initialization).</extracomment>
+        <translation>&lt;вне области&gt;</translation>
+    </message>
+    <message>
+        <source>%1 &lt;shadowed %2&gt;</source>
+        <extracomment>Display of variables shadowed by variables of the same name in nested scopes: Variable %1 is the variable name, %2 is a simple count.</extracomment>
+        <translation>%1 &lt;затеняет %2&gt;</translation>
+    </message>
+</context>
 <context>
     <name>Debugger::Internal::WatchModel</name>
     <message>
@@ -13703,21 +14467,33 @@ Do you want to retry?</source>
     </message>
 </context>
 <context>
-    <name>DebuggerEngine</name>
+    <name>Debugger::StartRemoteDialog</name>
     <message>
-        <source>Debugging complex command lines is currently not supported on Windows.</source>
-        <translation>Отладка сложных командных строк под Windows пока не поддерживаеться.</translation>
+        <source>Start Remote Analysis</source>
+        <translation>Запуск удалённой отладки</translation>
     </message>
-</context>
-<context>
-    <name>DebuggerPlugin</name>
     <message>
-        <source>Install &amp;Debug Information</source>
-        <translation>Установить &amp;отладочную информацию</translation>
+        <source>Kit:</source>
+        <translation>Комплект:</translation>
     </message>
     <message>
-        <source>Tries to install missing debug information.</source>
-        <translation>Попытка установить отсутствующую отладочную информацию.</translation>
+        <source>Executable:</source>
+        <translation>Программа:</translation>
+    </message>
+    <message>
+        <source>Arguments:</source>
+        <translation>Параметры:</translation>
+    </message>
+    <message>
+        <source>Working directory:</source>
+        <translation>Рабочий каталог:</translation>
+    </message>
+</context>
+<context>
+    <name>DebuggerEngine</name>
+    <message>
+        <source>Debugging complex command lines is currently not supported on Windows.</source>
+        <translation>Отладка сложных командных строк под Windows пока не поддерживаеться.</translation>
     </message>
 </context>
 <context>
@@ -13863,13 +14639,6 @@ Rebuilding the project might help.</source>
         <translation>Невозможно добавить определение метода.</translation>
     </message>
 </context>
-<context>
-    <name>DeviceProcessesDialog</name>
-    <message>
-        <source>&amp;Attach to Process</source>
-        <translation>&amp;Подключиться к процессу</translation>
-    </message>
-</context>
 <context>
     <name>Diff</name>
     <message>
@@ -14173,33 +14942,6 @@ Rebuilding the project might help.</source>
         <translation>Перерегулирование перехода кубической кривой.</translation>
     </message>
 </context>
-<context>
-    <name>EditorManager</name>
-    <message>
-        <source>Go Back</source>
-        <translation>Перейти назад</translation>
-    </message>
-    <message>
-        <source>Go Forward</source>
-        <translation>Перейти вперёд</translation>
-    </message>
-    <message>
-        <source>Split</source>
-        <translation>Разделить</translation>
-    </message>
-    <message>
-        <source>Split Side by Side</source>
-        <translation>Разделить вертикально</translation>
-    </message>
-    <message>
-        <source>Open in New Window</source>
-        <translation>Открыть в новом окне</translation>
-    </message>
-    <message>
-        <source>Close Document</source>
-        <translation>Закрыть документ</translation>
-    </message>
-</context>
 <context>
     <name>EditorSettingsPanelFactory</name>
     <message>
@@ -15023,6 +15765,45 @@ will also disable the following plugins:
         <translation>Имя шаблона:</translation>
     </message>
 </context>
+<context>
+    <name>FlameGraphView</name>
+    <message>
+        <source>Details</source>
+        <translation>Подробнее</translation>
+    </message>
+    <message>
+        <source>Various Events</source>
+        <translation>Разные события</translation>
+    </message>
+    <message>
+        <source>Type</source>
+        <translation>Тип</translation>
+    </message>
+    <message>
+        <source>Calls</source>
+        <translation>Вызовы</translation>
+    </message>
+    <message>
+        <source>Total Time</source>
+        <translation>Общее время</translation>
+    </message>
+    <message>
+        <source>Mean Time</source>
+        <translation>Среднее время</translation>
+    </message>
+    <message>
+        <source>In Percent</source>
+        <translation>В процентах</translation>
+    </message>
+    <message>
+        <source>Location</source>
+        <translation>Размещение</translation>
+    </message>
+    <message>
+        <source>No data available</source>
+        <translation>Нет данных</translation>
+    </message>
+</context>
 <context>
     <name>FlickableSection</name>
     <message>
@@ -15269,26 +16050,6 @@ will also disable the following plugins:
         <source>Files</source>
         <translation>Файлы</translation>
     </message>
-    <message>
-        <source>Hide files matching:</source>
-        <translation>Скрыть файлы соответствующие:</translation>
-    </message>
-    <message>
-        <source>Show files matching:</source>
-        <translation>Показывать совпадения файлов:</translation>
-    </message>
-    <message>
-        <source>Apply Filter</source>
-        <translation>Применить фильтр</translation>
-    </message>
-    <message>
-        <source>Generating file list...
-
-%1</source>
-        <translation>Создание списка файлов...
-
-%1</translation>
-    </message>
 </context>
 <context>
     <name>GenericProjectManager::Internal::GenericBuildConfigurationFactory</name>
@@ -15808,6 +16569,10 @@ Would you like to terminate it?</source>
 </context>
 <context>
     <name>Git::Internal::BranchDialog</name>
+    <message>
+        <source>Include branches and tags that have not been active for %1 days.</source>
+        <translation>Включение веток и тегов неактивных в течение %1 дней.</translation>
+    </message>
     <message>
         <source>Checkout</source>
         <translation>Смена ветки</translation>
@@ -15916,6 +16681,10 @@ Would you like to terminate it?</source>
         <source>Set current branch to track the selected one.</source>
         <translation>Сделать текущую ветку связанной с выбранной.</translation>
     </message>
+    <message>
+        <source>&amp;Include old entries</source>
+        <translation>В&amp;ключая старые элементы</translation>
+    </message>
 </context>
 <context>
     <name>Git::Internal::BranchModel</name>
@@ -15934,10 +16703,6 @@ Would you like to terminate it?</source>
 </context>
 <context>
     <name>Git::Internal::ChangeSelectionDialog</name>
-    <message>
-        <source>Browse &amp;Directory...</source>
-        <translation>Открыть &amp;каталог...</translation>
-    </message>
     <message>
         <source>Browse &amp;History...</source>
         <translation>Открыть &amp;историю...</translation>
@@ -17118,14 +17883,6 @@ Commit now?</source>
 </context>
 <context>
     <name>Git::Internal::MergeTool</name>
-    <message>
-        <source>Error</source>
-        <translation>Ошибка</translation>
-    </message>
-    <message>
-        <source>File input for the merge tool requires Git 1.7.8, or later.</source>
-        <translation>Для задания файлов mergetool требуется Git не ниже 1.7.8.</translation>
-    </message>
     <message>
         <source>Normal</source>
         <translation>Обычный</translation>
@@ -17292,7 +18049,7 @@ Remote: %4</source>
     </message>
     <message>
         <source>Timeout:</source>
-        <translation>Время ожидания:</translation>
+        <translation>Таймаут:</translation>
     </message>
     <message>
         <source>s</source>
@@ -17475,6 +18232,41 @@ You can choose between stashing the changes or discarding them.</source>
         <translation>Ошибка восстановления %1</translation>
     </message>
 </context>
+<context>
+    <name>GitGrep</name>
+    <message>
+        <source>&amp;Use Git Grep</source>
+        <translation>&amp;Использовать Git Grep</translation>
+    </message>
+    <message>
+        <source>Use Git Grep for searching. This includes only files that are managed by Git.</source>
+        <translation>Использовать для поиска Git Grep. Включает только файлы под управлением Git.</translation>
+    </message>
+    <message>
+        <source>Tree (optional)</source>
+        <translation>Дерево (опционально)</translation>
+    </message>
+    <message>
+        <source>Can be HEAD, tag, local or remote branch, or a commit hash.
+Leave empty to search through the file system.</source>
+        <translation>Может быть HEAD, тегом, хешем фиксации, локальной или внешней веткой.
+Оставьте пустым для поиска по файловой системе.</translation>
+    </message>
+    <message>
+        <source>Git Grep</source>
+        <translation>Git Grep</translation>
+    </message>
+    <message>
+        <source>Ref: %1
+%2</source>
+        <translation type="unfinished">Ссылка: %1
+%2</translation>
+    </message>
+    <message>
+        <source>Git Show %1:%2</source>
+        <translation>Git Show %1:%2</translation>
+    </message>
+</context>
 <context>
     <name>GlslEditor::Internal::GlslEditorPlugin</name>
     <message>
@@ -18250,6 +19042,47 @@ Add, modify, and remove document filters, which determine the documentation set
         <translation>Открыть просмотр изображений</translation>
     </message>
 </context>
+<context>
+    <name>ImageViewer::Internal::ExportDialog</name>
+    <message>
+        <source>File:</source>
+        <translation>Файл:</translation>
+    </message>
+    <message>
+        <source>x</source>
+        <extracomment>Multiplication, as in 32x32</extracomment>
+        <translation>x</translation>
+    </message>
+    <message>
+        <source>Size:</source>
+        <translation>Размер:</translation>
+    </message>
+    <message>
+        <source>%1 already exists.
+Would you like to overwrite it?</source>
+        <translation>%1 уже существует.
+Перезаписать его?</translation>
+    </message>
+</context>
+<context>
+    <name>ImageViewer::Internal::ImageView</name>
+    <message>
+        <source>Export %1</source>
+        <translation>Экспорт %1</translation>
+    </message>
+    <message>
+        <source>Exported &quot;%1&quot;, %2x%3, %4 bytes</source>
+        <translation>Экспорт «%1», %2х%3, %4 байт</translation>
+    </message>
+    <message>
+        <source>Export Image</source>
+        <translation>Экспорт изображения</translation>
+    </message>
+    <message>
+        <source>Could not write file &quot;%1&quot;.</source>
+        <translation>Не удалось записать файл «%1».</translation>
+    </message>
+</context>
 <context>
     <name>ImageViewer::Internal::ImageViewer</name>
     <message>
@@ -18262,14 +19095,29 @@ Add, modify, and remove document filters, which determine the documentation set
     </message>
 </context>
 <context>
-    <name>ImageViewer::Internal::ImageViewerActionHandler</name>
+    <name>ImageViewer::Internal::ImageViewerFile</name>
+    <message>
+        <source>Image format not supported.</source>
+        <translation>Формат изображения не поддерживается.</translation>
+    </message>
+    <message>
+        <source>Failed to read SVG image.</source>
+        <translation>Не удалось прочитать изображение SVG.</translation>
+    </message>
+    <message>
+        <source>Failed to read image.</source>
+        <translation>Не удалось прочитать изображение.</translation>
+    </message>
+</context>
+<context>
+    <name>ImageViewer::Internal::ImageViewerPlugin</name>
     <message>
         <source>Zoom In</source>
         <translation>Увеличить</translation>
     </message>
     <message>
         <source>Ctrl++</source>
-        <translation></translation>
+        <translation>Ctrl++</translation>
     </message>
     <message>
         <source>Zoom Out</source>
@@ -18277,62 +19125,51 @@ Add, modify, and remove document filters, which determine the documentation set
     </message>
     <message>
         <source>Ctrl+-</source>
-        <translation></translation>
+        <translation>Ctrl+-</translation>
     </message>
     <message>
         <source>Original Size</source>
         <translation>Исходный размер</translation>
     </message>
-    <message>
-        <source>Ctrl+0</source>
-        <translation></translation>
-    </message>
     <message>
         <source>Meta+0</source>
         <translation>Meta+0</translation>
     </message>
+    <message>
+        <source>Ctrl+0</source>
+        <translation>Ctrl+0</translation>
+    </message>
     <message>
         <source>Fit To Screen</source>
         <translation>На весь экран</translation>
     </message>
     <message>
         <source>Ctrl+=</source>
-        <translation></translation>
+        <translation>Ctrl+=</translation>
     </message>
     <message>
         <source>Switch Background</source>
         <translation>Включить/отключить фон</translation>
     </message>
-    <message>
-        <source>Switch Outline</source>
-        <translation>Включить/отключить обзор</translation>
-    </message>
-    <message>
-        <source>Toggle Animation</source>
-        <translation>Воспроизвести/приостановить анимацию</translation>
-    </message>
     <message>
         <source>Ctrl+[</source>
-        <translation></translation>
+        <translation>Ctrl+[</translation>
     </message>
     <message>
-        <source>Ctrl+]</source>
-        <translation></translation>
+        <source>Switch Outline</source>
+        <translation>Включить/отключить обзор</translation>
     </message>
-</context>
-<context>
-    <name>ImageViewer::Internal::ImageViewerFile</name>
     <message>
-        <source>Image format not supported.</source>
-        <translation>Формат изображения не поддерживается.</translation>
+        <source>Ctrl+]</source>
+        <translation>Ctrl+]</translation>
     </message>
     <message>
-        <source>Failed to read SVG image.</source>
-        <translation>Не удалось прочитать изображение SVG.</translation>
+        <source>Toggle Animation</source>
+        <translation>Воспроизвести/приостановить анимацию</translation>
     </message>
     <message>
-        <source>Failed to read image.</source>
-        <translation>Не удалось прочитать изображение.</translation>
+        <source>Export Image</source>
+        <translation>Экспортировать изображение</translation>
     </message>
 </context>
 <context>
@@ -18361,6 +19198,10 @@ Add, modify, and remove document filters, which determine the documentation set
         <source>Original Size</source>
         <translation>Исходный размер</translation>
     </message>
+    <message>
+        <source>Export as Image</source>
+        <translation>Экспортировать как изображение</translation>
+    </message>
 </context>
 <context>
     <name>ImportManagerComboBox</name>
@@ -18651,6 +19492,14 @@ Ids must begin with a lowercase letter.</source>
         <source>%1 is not connected.</source>
         <translation>%1 не подключён.</translation>
     </message>
+    <message>
+        <source>Device type:</source>
+        <translation>Тип устройства:</translation>
+    </message>
+    <message>
+        <source>Executable:</source>
+        <translation>Программа:</translation>
+    </message>
 </context>
 <context>
     <name>Ios::Internal::IosRunConfigurationWidget</name>
@@ -18724,41 +19573,6 @@ Ids must begin with a lowercase letter.</source>
         <translation></translation>
     </message>
 </context>
-<context>
-    <name>IosRunConfiguration</name>
-    <message>
-        <source>Form</source>
-        <translation></translation>
-    </message>
-    <message>
-        <source>Executable:</source>
-        <translation>Программа:</translation>
-    </message>
-    <message>
-        <source>Arguments:</source>
-        <translation>Параметры:</translation>
-    </message>
-    <message>
-        <source>iPad</source>
-        <translation>iPad</translation>
-    </message>
-    <message>
-        <source>iPhone 3.5-inch Retina Display</source>
-        <translation>iPhone с экраном Ретина 3.5&quot;</translation>
-    </message>
-    <message>
-        <source>iPhone 4-inch Retina Display</source>
-        <translation>iPhone с экраном Ретина 4&quot;</translation>
-    </message>
-    <message>
-        <source>iPad Retina Display</source>
-        <translation>iPad с экраном Ретина</translation>
-    </message>
-    <message>
-        <source>Device type:</source>
-        <translation>Тип устройства:</translation>
-    </message>
-</context>
 <context>
     <name>IosSettingsWidget</name>
     <message>
@@ -18836,7 +19650,7 @@ Ids must begin with a lowercase letter.</source>
         <translation>Предпочтительный размер</translation>
     </message>
     <message>
-        <source>Preferred height of an item in a layout. If the preferred height is -1, it will be ignored.</source>
+        <source>Preferred size of an item in a layout. If the preferred height or width is -1, it is ignored.</source>
         <translation>Предпочтительный резмер элемента в компоновщике. Если он -1, то игнорируется.</translation>
     </message>
     <message>
@@ -18883,13 +19697,6 @@ Ids must begin with a lowercase letter.</source>
         <translation>Привязки</translation>
     </message>
 </context>
-<context>
-    <name>LinksBar</name>
-    <message>
-        <source>Qt Creator</source>
-        <translation>Qt Creator</translation>
-    </message>
-</context>
 <context>
     <name>ListViewSpecifics</name>
     <message>
@@ -19180,10 +19987,110 @@ Ids must begin with a lowercase letter.</source>
         <source>Input Events</source>
         <translation>События ввода</translation>
     </message>
+    <message>
+        <source>Debug Messages</source>
+        <translation>Отладочные сообщения</translation>
+    </message>
     <message>
         <source>JavaScript</source>
         <translation>JavaScript</translation>
     </message>
+    <message>
+        <source>GUI Thread</source>
+        <translation>Поток GUI</translation>
+    </message>
+    <message>
+        <source>Render Thread</source>
+        <translation>Поток рендера</translation>
+    </message>
+    <message>
+        <source>Render Thread Details</source>
+        <translation>Подробности потока рендера</translation>
+    </message>
+    <message>
+        <source>Polish</source>
+        <translation type="unfinished">Полировка</translation>
+    </message>
+    <message>
+        <source>Wait</source>
+        <translation type="unfinished">Ожидание</translation>
+    </message>
+    <message>
+        <source>GUI Thread Sync</source>
+        <translation type="unfinished">Синхронизация с потоком GUI</translation>
+    </message>
+    <message>
+        <source>Render Thread Sync</source>
+        <translation type="unfinished">Синхронизация с потоком рендера</translation>
+    </message>
+    <message>
+        <source>Render</source>
+        <translation type="unfinished">Рендер</translation>
+    </message>
+    <message>
+        <source>Swap</source>
+        <translation type="unfinished">Переключение</translation>
+    </message>
+    <message>
+        <source>Render Preprocess</source>
+        <translation type="unfinished">Рендер - преобработка</translation>
+    </message>
+    <message>
+        <source>Render Update</source>
+        <translation type="unfinished">Рендер - обновление</translation>
+    </message>
+    <message>
+        <source>Render Bind</source>
+        <translation type="unfinished">Рендер - привязка</translation>
+    </message>
+    <message>
+        <source>Render Render</source>
+        <translation type="unfinished">Рендер - рендеринг</translation>
+    </message>
+    <message>
+        <source>Material Compile</source>
+        <translation type="unfinished">Компиляция материала</translation>
+    </message>
+    <message>
+        <source>Glyph Render</source>
+        <translation type="unfinished">Отрисовка глифов</translation>
+    </message>
+    <message>
+        <source>Glyph Upload</source>
+        <translation type="unfinished">Выгрузка глифов</translation>
+    </message>
+    <message>
+        <source>Texture Bind</source>
+        <translation type="unfinished">Текстуры - привязка</translation>
+    </message>
+    <message>
+        <source>Texture Convert</source>
+        <translation type="unfinished">Текстуры - преобразование</translation>
+    </message>
+    <message>
+        <source>Texture Swizzle</source>
+        <translatorcomment>не знаю, как выбор/обмен цветовых каналов перевести на русский</translatorcomment>
+        <translation type="unfinished">Текстуры - смешивание</translation>
+    </message>
+    <message>
+        <source>Texture Upload</source>
+        <translation type="unfinished">Текстуры - выгрузка</translation>
+    </message>
+    <message>
+        <source>Texture Mipmap</source>
+        <translation type="unfinished">Текстуры - мипмамминг</translation>
+    </message>
+    <message>
+        <source>Texture Delete</source>
+        <translation type="unfinished">Текстуры - удаление</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>MainWindow</source>
+        <translation></translation>
+    </message>
 </context>
 <context>
     <name>Mercurial::Internal::AuthenticationDialog</name>
@@ -19525,7 +20432,7 @@ Ids must begin with a lowercase letter.</source>
     </message>
     <message>
         <source>Timeout:</source>
-        <translation>Время ожидания:</translation>
+        <translation>Таймаут:</translation>
     </message>
     <message>
         <source>s</source>
@@ -19620,6 +20527,10 @@ Ids must begin with a lowercase letter.</source>
         <source>C++ source code</source>
         <translation>Файл исходных текстов C++</translation>
     </message>
+    <message>
+        <source>Qt documentation file</source>
+        <translation>Файл документации Qt</translation>
+    </message>
     <message>
         <source>Objective-C++ source code</source>
         <translation>Файл исходных текстов Objective-C++</translation>
@@ -19791,6 +20702,14 @@ Ids must begin with a lowercase letter.</source>
         <source>&amp;Delete</source>
         <translation>&amp;Удалить</translation>
     </message>
+    <message>
+        <source>Model Editor</source>
+        <translation>Редактор моделей</translation>
+    </message>
+    <message>
+        <source>Export Diagram...</source>
+        <translation>Экспорт диаграммы...</translation>
+    </message>
     <message>
         <source>Open Parent Diagram</source>
         <translation>Открыть родительскую диаграмму</translation>
@@ -19800,35 +20719,31 @@ Ids must begin with a lowercase letter.</source>
         <translation>Изменить свойства элемента</translation>
     </message>
     <message>
-        <source>Return</source>
-        <translation>Ввод</translation>
-    </message>
-</context>
-<context>
-    <name>ModelEditor::Internal::FileWizardFactory</name>
-    <message>
-        <source>Model</source>
-        <translation>Модель</translation>
+        <source>Shift+Return</source>
+        <translation>Shift+Return</translation>
     </message>
     <message>
-        <source>Creates an empty model</source>
-        <translation>Создаёт пустую модель</translation>
+        <source>Edit Item on Diagram</source>
+        <translation>Изменить элемент диаграммы</translation>
     </message>
     <message>
-        <source>New %1</source>
-        <translation>Новая %1</translation>
+        <source>Return</source>
+        <translation>Ввод</translation>
     </message>
+</context>
+<context>
+    <name>ModelEditor::Internal::ExtPropertiesMView</name>
     <message>
-        <source>Model Name and Location</source>
-        <translation>Имя модели и размещение</translation>
+        <source>Select Custom Configuration Folder</source>
+        <translation>Выбор особого каталога настроек</translation>
     </message>
     <message>
-        <source>Model name:</source>
-        <translation>Имя модели:</translation>
+        <source>Config Path:</source>
+        <translation>Путь к настройкам:</translation>
     </message>
     <message>
-        <source>Location:</source>
-        <translation>Размещение:</translation>
+        <source>&lt;font color=red&gt;Model file must be reloaded.&lt;/font&gt;</source>
+        <translation>&lt;font color=red&gt;Файл модели должен быть перезагружен.&lt;/font&gt;</translation>
     </message>
 </context>
 <context>
@@ -19837,10 +20752,6 @@ Ids must begin with a lowercase letter.</source>
         <source>No model loaded. Cannot save.</source>
         <translation>Модель не загружена. Сохранить невозможно.</translation>
     </message>
-    <message>
-        <source>model.qmodel</source>
-        <translation>model.qmodel</translation>
-    </message>
     <message>
         <source>Cannot reload model file.</source>
         <translation>Не удалось загрузить файл модели.</translation>
@@ -19872,6 +20783,26 @@ Ids must begin with a lowercase letter.</source>
         <source>Add Canvas Diagram</source>
         <translation>Добавить диаграмму холста</translation>
     </message>
+    <message>
+        <source>Images (*.png *.jpeg *.jpg *.tif *.tiff);;PDF (*.pdf)</source>
+        <translation>Изображения (*.png *.jpeg *.jpg *.tif *.tiff);;PDF (*.pdf)</translation>
+    </message>
+    <message>
+        <source>;;SVG (*.svg)</source>
+        <translation>;;SVG (*.svg)</translation>
+    </message>
+    <message>
+        <source>Export Diagram</source>
+        <translation>Экспорт диаграммы</translation>
+    </message>
+    <message>
+        <source>Exporting Diagram Failed</source>
+        <translation>Не удалось экспортировать диаграмму</translation>
+    </message>
+    <message>
+        <source>Exporting the diagram into file&lt;br&gt;&quot;%1&quot;&lt;br&gt;failed.</source>
+        <translation>Не удалось экспортировать диаграмму в файл «%1».</translation>
+    </message>
     <message>
         <source>Package</source>
         <translation>Пакет</translation>
@@ -19948,6 +20879,10 @@ Ids must begin with a lowercase letter.</source>
         <source>Go to Implementation</source>
         <translation>Перейти к реализации</translation>
     </message>
+    <message>
+        <source>Invalid item.</source>
+        <translation>Неверный элемент.</translation>
+    </message>
     <message>
         <source>Cannot find an implementation.</source>
         <translation>Не удалось найти реализацию.</translation>
@@ -20638,7 +21573,7 @@ Ids must begin with a lowercase letter.</source>
     </message>
     <message>
         <source>Timeout:</source>
-        <translation>Время ожидания:</translation>
+        <translation>Таймаут:</translation>
     </message>
     <message>
         <source>s</source>
@@ -20744,6 +21679,10 @@ Ids must begin with a lowercase letter.</source>
         <source>The plugin &quot;%1&quot; does not exist.</source>
         <translation>Модуль «%1» не существует.</translation>
     </message>
+    <message>
+        <source>The plugin &quot;%1&quot; is not tested.</source>
+        <translation>Модуль «%1» не тестировался.</translation>
+    </message>
     <message>
         <source>Unknown option %1</source>
         <translation>Неизвестный параметр: %1</translation>
@@ -21082,6 +22021,13 @@ Ids must begin with a lowercase letter.</source>
 </translation>
     </message>
 </context>
+<context>
+    <name>ProjectExplorer::ClangToolChainFactory</name>
+    <message>
+        <source>Clang</source>
+        <translation>Clang</translation>
+    </message>
+</context>
 <context>
     <name>ProjectExplorer::CustomWizard</name>
     <message>
@@ -21124,6 +22070,46 @@ Ids must begin with a lowercase letter.</source>
         <source>Qt Creator Plugin</source>
         <translation>Модуль Qt Creator</translation>
     </message>
+    <message>
+        <source>Creates a new project including auto test skeleton.</source>
+        <translation>Создание нового проекта с заготовкой под автотест.</translation>
+    </message>
+    <message>
+        <source>Auto Test</source>
+        <translation>Автотест</translation>
+    </message>
+    <message>
+        <source>Project and Test Information</source>
+        <translation>Информация о проекте и тестах</translation>
+    </message>
+    <message>
+        <source>GUI Application</source>
+        <translation>Приложение с GUI</translation>
+    </message>
+    <message>
+        <source>Test Case Name:</source>
+        <translation>Имя теста:</translation>
+    </message>
+    <message>
+        <source>Requires QApplication</source>
+        <translation>Требуется QApplication</translation>
+    </message>
+    <message>
+        <source>Generate initialization and cleanup code</source>
+        <translation>Создать код инициализации и очистки</translation>
+    </message>
+    <message>
+        <source>Build auto tests</source>
+        <translation>Собирать автотесты</translation>
+    </message>
+    <message>
+        <source>always</source>
+        <translation>всегда</translation>
+    </message>
+    <message>
+        <source>debug only</source>
+        <translation>только при отладке</translation>
+    </message>
     <message>
         <source>Creates a qmake-based test project for which a code snippet can be entered.</source>
         <translation>Создание тестового проекта на базе qmake с возможностью вставки фрагмента кода.</translation>
@@ -21845,6 +22831,13 @@ Ids must begin with a lowercase letter.</source>
         <translation>Этапы очистки</translation>
     </message>
 </context>
+<context>
+    <name>ProjectExplorer::Internal::ClangClToolChainConfigWidget</name>
+    <message>
+        <source>LLVM:</source>
+        <translation>LLVM:</translation>
+    </message>
+</context>
 <context>
     <name>ProjectExplorer::Internal::ClangToolChainFactory</name>
     <message>
@@ -21923,10 +22916,6 @@ Ids must begin with a lowercase letter.</source>
         <source>&amp;Error message capture pattern:</source>
         <translation>Шаблон захвата сообщений об &amp;ошибках:</translation>
     </message>
-    <message>
-        <source>#error (.*):(\d+): (.*)$</source>
-        <translation></translation>
-    </message>
     <message>
         <source>Capture Positions</source>
         <translation>Положения захвата</translation>
@@ -21951,10 +22940,6 @@ Ids must begin with a lowercase letter.</source>
         <source>E&amp;rror message:</source>
         <translation>&amp;Сообщение об ошибке:</translation>
     </message>
-    <message>
-        <source>#error /home/user/src/test.c:891: Unknown identifier `test`</source>
-        <translation></translation>
-    </message>
     <message>
         <source>File name:</source>
         <translation>Имя файла:</translation>
@@ -21980,8 +22965,40 @@ Ids must begin with a lowercase letter.</source>
         <translation>Шаблон пуст.</translation>
     </message>
     <message>
-        <source>Pattern does not match the error message.</source>
-        <translation>Шаблон не соответствует сообщению об ошибке.</translation>
+        <source>No message given.</source>
+        <translation>Сообщение не передано.</translation>
+    </message>
+    <message>
+        <source>Pattern does not match the message.</source>
+        <translation>Шаблон не соответствует сообщению.</translation>
+    </message>
+    <message>
+        <source>Error</source>
+        <translation>Ошибка</translation>
+    </message>
+    <message>
+        <source>Capture Output Channels</source>
+        <translation>Захват выходных каналов</translation>
+    </message>
+    <message>
+        <source>Standard output</source>
+        <translation>Стандартный ввод</translation>
+    </message>
+    <message>
+        <source>Standard error</source>
+        <translation>Вывод ошибок</translation>
+    </message>
+    <message>
+        <source>Warning</source>
+        <translation>Предупреждение</translation>
+    </message>
+    <message>
+        <source>Warning message capture pattern:</source>
+        <translation>Шаблон захвата предупреждений:</translation>
+    </message>
+    <message>
+        <source>Warning message:</source>
+        <translation>Предупреждающее сообщение:</translation>
     </message>
 </context>
 <context>
@@ -22271,10 +23288,6 @@ Ids must begin with a lowercase letter.</source>
         <source>Open Project in &quot;%1&quot;</source>
         <translation>Открыть проект в «%1»</translation>
     </message>
-    <message>
-        <source>Open With</source>
-        <translation>Открыть с помощью</translation>
-    </message>
     <message>
         <source>Choose Folder...</source>
         <translation>Выбрать каталог...</translation>
@@ -22454,6 +23467,29 @@ Ids must begin with a lowercase letter.</source>
         <translation></translation>
     </message>
 </context>
+<context>
+    <name>ProjectExplorer::Internal::LocalApplicationRunControl</name>
+    <message>
+        <source>No executable specified.</source>
+        <translation>Программа не указана.</translation>
+    </message>
+    <message>
+        <source>Executable %1 does not exist.</source>
+        <translation>Программа %1 отсутствует.</translation>
+    </message>
+    <message>
+        <source>Starting %1...</source>
+        <translation>Запускается %1...</translation>
+    </message>
+    <message>
+        <source>%1 crashed</source>
+        <translation>%1 завершился крахом</translation>
+    </message>
+    <message>
+        <source>%1 exited with code %2</source>
+        <translation>%1 завершился с кодом %2</translation>
+    </message>
+</context>
 <context>
     <name>ProjectExplorer::Internal::MingwToolChainFactory</name>
     <message>
@@ -22545,7 +23581,7 @@ Ids must begin with a lowercase letter.</source>
     </message>
 </context>
 <context>
-    <name>ProjectExplorer::Internal::MsvcToolChainConfigWidget</name>
+    <name>ProjectExplorer::Internal::MsvcBasedToolChainConfigWidget</name>
     <message>
         <source>Initialization:</source>
         <translation>Инициализация:</translation>
@@ -23060,34 +24096,6 @@ to project &quot;%2&quot;.</source>
         <source>No kit defined in this project.</source>
         <translation>Для данного проекта не задан комплект.</translation>
     </message>
-    <message>
-        <source>Incompatible Kit</source>
-        <translation>Комплект не подходит</translation>
-    </message>
-    <message>
-        <source>Kit %1 is incompatible with kit %2.</source>
-        <translation>Комплекты %1 и %2 несовместимы.</translation>
-    </message>
-    <message>
-        <source>Build configurations:</source>
-        <translation>Конфигурации сборки:</translation>
-    </message>
-    <message>
-        <source>Deploy configurations:</source>
-        <translation>Конфигурации установки:</translation>
-    </message>
-    <message>
-        <source>Run configurations</source>
-        <translation>Конфигурации запуска</translation>
-    </message>
-    <message>
-        <source>Partially Incompatible Kit</source>
-        <translation>Комплект частично несовместим</translation>
-    </message>
-    <message>
-        <source>Some configurations could not be copied.</source>
-        <translation>Некоторые конфигураций не удалось скопировать.</translation>
-    </message>
     <message>
         <source>Cancel Build &amp;&amp; Remove Kit</source>
         <translation>Отменить сборку и удалить комплект</translation>
@@ -23229,12 +24237,12 @@ to project &quot;%2&quot;.</source>
         <translation>Компилятор, используемый для сборки.&lt;br&gt;Убедитесь, что компилятор создаёт код, совместимый с целевым устройством, профилем Qt и другими используемыми библиотеками.</translation>
     </message>
     <message>
-        <source>Compiler:</source>
-        <translation>Компилятор:</translation>
+        <source>&lt;No compiler&gt;</source>
+        <translation>&lt;Нет компилятора&gt;</translation>
     </message>
     <message>
-        <source>&lt;No compiler available&gt;</source>
-        <translation>&lt;Компилятор недоступен&gt;</translation>
+        <source>Compiler:</source>
+        <translation>Компилятор:</translation>
     </message>
 </context>
 <context>
@@ -23634,6 +24642,10 @@ to project &quot;%2&quot;.</source>
         <source>&quot;data&quot; must be empty or a JSON object for &quot;Project&quot; pages.</source>
         <translation>Объект «data» должен быть пустым или иметь тип JSON для страниц «Проект».</translation>
     </message>
+    <message>
+        <source>Invalid regular expression &quot;%1&quot; in &quot;%2&quot;. %3</source>
+        <translation>Неверное регулярное выражение «%1» в «%2». %3</translation>
+    </message>
     <message>
         <source>&quot;data&quot; for a &quot;Summary&quot; page can be unset or needs to be an object.</source>
         <translation>«data» для страницы «Общее» может быть не задан или должен быть объектом.</translation>
@@ -23884,6 +24896,30 @@ to project &quot;%2&quot;.</source>
         <source>JS File</source>
         <translation>Файл JS</translation>
     </message>
+    <message>
+        <source>Model name:</source>
+        <translation>Имя модели:</translation>
+    </message>
+    <message>
+        <source>Location:</source>
+        <translation>Размещение:</translation>
+    </message>
+    <message>
+        <source>Model Name and Location</source>
+        <translation>Имя модели и размещение</translation>
+    </message>
+    <message>
+        <source>Creates a new empty model with an empty diagram.</source>
+        <translation>Создание новой пустой модели с пустой диаграммой.</translation>
+    </message>
+    <message>
+        <source>Modeling</source>
+        <translation>Моделирование</translation>
+    </message>
+    <message>
+        <source>Model</source>
+        <translation>Модель</translation>
+    </message>
     <message>
         <source>Creates an empty Python script file using UTF-8 charset.</source>
         <translation>Создание пустого файла сценария Python с использованием кодировки UTF-8.</translation>
@@ -24044,6 +25080,14 @@ Preselects a desktop Qt for building the application if available.</source>
         <source>Qt Canvas 3D Application</source>
         <translation>Приложение Qt Canvas 3D</translation>
     </message>
+    <message>
+        <source>Creates a deployable Qt Quick 2 application using Qt Labs Controls.</source>
+        <translation>Создание устанавливаемого приложения Qt Quick 2 с использованием Qt Labs Controls.</translation>
+    </message>
+    <message>
+        <source>Qt Labs Controls Application</source>
+        <translation>Приложение Qt Labs Controls</translation>
+    </message>
     <message>
         <source>Qt 5.6</source>
         <translation>Qt 5.6</translation>
@@ -24124,6 +25168,14 @@ Preselects a desktop Qt for building the application if available.</source>
         <source>Directory:</source>
         <translation>Каталог:</translation>
     </message>
+    <message>
+        <source>Creates a vertex shader in the Desktop OpenGL Shading Language (GLSL). Vertex shaders transform the positions, normals and texture coordinates of triangles, points and lines rendered with OpenGL.</source>
+        <translation>Создание вершинного шейдера на языке Desktop OpenGL Shading Language (GLSL). Вершинные шейдеры изменяют положение, нормали и текстурные координаты теугольников, точек и линий, отрисовываемых с помощью OpenGL.</translation>
+    </message>
+    <message>
+        <source>Creates a vertex shader in the OpenGL/ES 2.0 Shading Language (GLSL/ES). Vertex shaders transform the positions, normals and texture coordinates of triangles, points and lines rendered with OpenGL.</source>
+        <translation>Создание вершинного шейдера на языке OpenGL/ES 2.0 Shading Language (GLSL/ES). Вершинные шейдеры изменяют положение, нормали и текстурные координаты теугольников, точек и линий, отрисовываемых с помощью OpenGL.</translation>
+    </message>
     <message>
         <source>&quot;%{JS: Util.toNativeSeparators(&apos;%{TargetPath}&apos;)}&quot; exists in the filesystem.</source>
         <translation>«%{JS: Util.toNativeSeparators(&apos;%{TargetPath}&apos;)}»  уже существует.</translation>
@@ -24308,10 +25360,6 @@ Preselects a desktop Qt for building the application if available.</source>
         <source>Fragment Shader (Desktop OpenGL)</source>
         <translation>Фрагментный шейдер (Desktop OpenGL)</translation>
     </message>
-    <message>
-        <source>Creates a vertex shader in the Desktop OpenGL Shading Language (GLSL). Vertex shaders transform the positions, normals and texture co-ordinates of triangles, points and lines rendered with OpenGL.</source>
-        <translation>Создание вершинного шейдера на языке Desktop OpenGL Shading Language (GLSL). Вершинные шейдеры изменяют положение, нормали и текстурные координаты теугольников, точек и линий, отрисовываемых с помощью OpenGL.</translation>
-    </message>
     <message>
         <source>Vertex Shader (Desktop OpenGL)</source>
         <translation>Вершинный шейдер (Desktop OpenGL)</translation>
@@ -24324,10 +25372,6 @@ Preselects a desktop Qt for building the application if available.</source>
         <source>Fragment Shader (OpenGL/ES 2.0)</source>
         <translation>Фрагментный шейдер (OpenGL/ES 2.0)</translation>
     </message>
-    <message>
-        <source>Creates a vertex shader in the OpenGL/ES 2.0 Shading Language (GLSL/ES). Vertex shaders transform the positions, normals and texture co-ordinates of triangles, points and lines rendered with OpenGL.</source>
-        <translation>Создание вершинного шейдера на языке OpenGL/ES 2.0 Shading Language (GLSL/ES). Вершинные шейдеры изменяют положение, нормали и текстурные координаты теугольников, точек и линий, отрисовываемых с помощью OpenGL.</translation>
-    </message>
     <message>
         <source>Vertex Shader (OpenGL/ES 2.0)</source>
         <translation>Вершинный шейдер (OpenGL/ES 2.0)</translation>
@@ -24415,6 +25459,10 @@ Preselects a desktop Qt for building the application if available.</source>
         <source>&quot;kind&quot; value &quot;%1&quot; is not &quot;class&quot; (deprecated), &quot;file&quot; or &quot;project&quot;.</source>
         <translation>«kind» имеет значение «%1», не являющееся «class» (устарело), «file» или «project».</translation>
     </message>
+    <message>
+        <source>&quot;kind&quot; is &quot;file&quot; or &quot;class&quot; (deprecated) and &quot;%1&quot; is also set.</source>
+        <translation>«kind» это «file» или «class» (устарело) и «%1» установлен.</translation>
+    </message>
     <message>
         <source>Icon file &quot;%1&quot; not found.</source>
         <translation>Файл значка «%1» не найден.</translation>
@@ -24471,18 +25519,6 @@ Preselects a desktop Qt for building the application if available.</source>
         <source>When parsing &quot;pages&quot;: %1</source>
         <translation>При обработке «pages»: %1</translation>
     </message>
-    <message>
-        <source>List element of &quot;options&quot; is not an object.</source>
-        <translation>Списочный элемент записей типа «options» не является объектом.</translation>
-    </message>
-    <message>
-        <source>No &quot;key&quot; given for entry in &quot;options&quot;.</source>
-        <translation>Не задан «key» для элемента в «options».</translation>
-    </message>
-    <message>
-        <source>When parsing &quot;options&quot;: Key &quot;%1&quot; set more than once.</source>
-        <translation>При обработке «options»: Ключ «%1» задан более одного раза.</translation>
-    </message>
 </context>
 <context>
     <name>ProjectExplorer::JsonWizardGenerator</name>
@@ -24585,29 +25621,6 @@ Preselects a desktop Qt for building the application if available.</source>
         <translation>Сделать по умолчанию</translation>
     </message>
 </context>
-<context>
-    <name>ProjectExplorer::LocalApplicationRunControl</name>
-    <message>
-        <source>No executable specified.</source>
-        <translation>Программа не указана.</translation>
-    </message>
-    <message>
-        <source>Executable %1 does not exist.</source>
-        <translation>Программа %1 отсутствует.</translation>
-    </message>
-    <message>
-        <source>Starting %1...</source>
-        <translation>Запускается %1...</translation>
-    </message>
-    <message>
-        <source>%1 crashed</source>
-        <translation>%1 завершился крахом</translation>
-    </message>
-    <message>
-        <source>%1 exited with code %2</source>
-        <translation>%1 завершился с кодом %2</translation>
-    </message>
-</context>
 <context>
     <name>ProjectExplorer::LocalEnvironmentAspect</name>
     <message>
@@ -24642,6 +25655,34 @@ Please close all running instances of your application before starting a build.<
         <source>Project Name</source>
         <translation>Имя проекта</translation>
     </message>
+    <message>
+        <source>Incompatible Kit</source>
+        <translation>Комплект не подходит</translation>
+    </message>
+    <message>
+        <source>Kit %1 is incompatible with kit %2.</source>
+        <translation>Комплекты %1 и %2 несовместимы.</translation>
+    </message>
+    <message>
+        <source>Build configurations:</source>
+        <translation>Конфигурации сборки:</translation>
+    </message>
+    <message>
+        <source>Deploy configurations:</source>
+        <translation>Конфигурации установки:</translation>
+    </message>
+    <message>
+        <source>Run configurations:</source>
+        <translation>Конфигурации запуска:</translation>
+    </message>
+    <message>
+        <source>Partially Incompatible Kit</source>
+        <translation>Комплект частично несовместим</translation>
+    </message>
+    <message>
+        <source>Some configurations could not be copied.</source>
+        <translation>Некоторые конфигураций не удалось скопировать.</translation>
+    </message>
 </context>
 <context>
     <name>ProjectExplorer::ProjectConfiguration</name>
@@ -24696,10 +25737,6 @@ Please close all running instances of your application before starting a build.<
         <source>Recent P&amp;rojects</source>
         <translation>Недавние п&amp;роекты</translation>
     </message>
-    <message>
-        <source>Sessions</source>
-        <translation>Сессии</translation>
-    </message>
     <message>
         <source>Close Project</source>
         <translation>Закрыть проект</translation>
@@ -24792,6 +25829,10 @@ Please close all running instances of your application before starting a build.<
         <source>Cancel Build</source>
         <translation>Отменить сборку</translation>
     </message>
+    <message>
+        <source>S&amp;essions</source>
+        <translation>С&amp;ессии</translation>
+    </message>
     <message>
         <source>Add New...</source>
         <translation>Добавить новый...</translation>
@@ -25255,6 +26296,16 @@ Reason: %2</source>
         <source>Add Existing Directory</source>
         <translation>Добавление существующего каталога</translation>
     </message>
+</context>
+<context>
+    <name>ProjectExplorer::SelectableFilesDialogEditFiles</name>
+    <message>
+        <source>Edit Files</source>
+        <translation>Изменить файлы</translation>
+    </message>
+</context>
+<context>
+    <name>ProjectExplorer::SelectableFilesWidget</name>
     <message>
         <source>Source directory:</source>
         <translation>Каталог исходников:</translation>
@@ -25263,21 +26314,14 @@ Reason: %2</source>
         <source>Start Parsing</source>
         <translation>Начать обработку</translation>
     </message>
-</context>
-<context>
-    <name>ProjectExplorer::SelectableFilesDialogEditFiles</name>
     <message>
-        <source>Edit Files</source>
-        <translation>Изменить файлы</translation>
+        <source>Show files matching:</source>
+        <translation>Показывать совпадения файлов:</translation>
     </message>
     <message>
         <source>Hide files matching:</source>
         <translation>Скрыть файлы соответствующие:</translation>
     </message>
-    <message>
-        <source>Show files matching:</source>
-        <translation>Показывать совпадения файлов:</translation>
-    </message>
     <message>
         <source>Apply Filter</source>
         <translation>Применить фильтр</translation>
@@ -25471,6 +26515,10 @@ These files are preserved.</source>
         <source>Qt Creator needs a build configuration set up to build. Configure a build configuration in the project settings.</source>
         <translation>Для сборки проекта необходимо в настройках проекта задать конфигурацию сборки.</translation>
     </message>
+    <message>
+        <source>You asked to build the current Run Configuration&apos;s build target only, but it is not associated with a build target. Update the Make Step in your build settings.</source>
+        <translation>Запрос на сборку только цели текущей конфигурации запуска, но она не связана с целью. Обновите шаги сборки в настройках сборки.</translation>
+    </message>
 </context>
 <context>
     <name>ProjectExplorer::TerminalAspect</name>
@@ -25507,6 +26555,10 @@ These files are preserved.</source>
         <source>None</source>
         <translation>Не задан</translation>
     </message>
+    <message>
+        <source>Path to the compiler executable</source>
+        <translation>Путь к компилятору</translation>
+    </message>
     <message>
         <source>No compiler set in kit.</source>
         <translation>У комплекта не задан компилятор.</translation>
@@ -25657,10 +26709,6 @@ These files are preserved.</source>
         <source>unnamed</source>
         <translation>без имени</translation>
     </message>
-    <message>
-        <source>%1 (built-in)</source>
-        <translation>%1 (встроенная)</translation>
-    </message>
 </context>
 <context>
     <name>QDockWidget</name>
@@ -25695,64 +26743,122 @@ These files are preserved.</source>
         <translation>&lt;Введите регулярное выражение&gt;</translation>
     </message>
     <message>
-        <source>Show Definition</source>
-        <translation>Показать определение</translation>
+        <source>%1 %2 per iteration (total: %3, iterations: %4)</source>
+        <translation>%1 %2 за итерацию (всего: %3, итераций: %4)</translation>
     </message>
     <message>
-        <source>Open Diagram</source>
-        <translation>Открыть диаграмму</translation>
+        <source>Test run canceled by user.</source>
+        <translation>Тест прерван пользователем.</translation>
     </message>
     <message>
-        <source>Create Diagram</source>
-        <translation>Создать диаграмму</translation>
+        <source>Project is null for &quot;%1&quot;. Removing from test run.
+Check the test environment.</source>
+        <translation>Нулевой проект для «%1». Исключается из тестирования.
+Проверьте среду тестирования.</translation>
     </message>
     <message>
-        <source>Remove</source>
-        <translation>Убрать</translation>
+        <source>Could not find command &quot;%1&quot;. (%2)</source>
+        <translation>Не удалось найти команду «%1». (%2)</translation>
     </message>
     <message>
-        <source>Delete</source>
-        <translation>Удалить</translation>
+        <source>Test case canceled due to timeout. 
+Maybe raise the timeout?</source>
+        <translation>Текст был отменён по таймауту.
+Может его увеличить?</translation>
     </message>
     <message>
-        <source>Align Objects</source>
-        <translation>Выровнить объекты</translation>
+        <source> (none)</source>
+        <translation> (нет)</translation>
     </message>
     <message>
-        <source>Align Left</source>
-        <translation>По левому краю</translation>
+        <source>&lt;p&gt;Give all test cases a name to ensure correct behavior when running test cases and to be able to select them.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Задайте имена всем тестам, чтобы быть уверенным в корректности поведения при прохождении тестов и для их выбора.&lt;/p&gt;</translation>
     </message>
     <message>
-        <source>Center Vertically</source>
-        <translation>По центру вертикально</translation>
+        <source>parameterized</source>
+        <translation>параметрический</translation>
     </message>
     <message>
-        <source>Align Right</source>
-        <translation>По правому краю</translation>
+        <source>typed</source>
+        <translation>типизированный</translation>
     </message>
     <message>
-        <source>Align Top</source>
-        <translation>По верху</translation>
+        <source>Cannot create temporary file &quot;%1&quot;: %2.</source>
+        <translation>Невозможно создать временный файл «%1»: %2.</translation>
     </message>
     <message>
-        <source>Center Horizontally</source>
-        <translation>По центру горизонтально</translation>
+        <source>Cannot call %1 or some other error occurred. Time out reached while formatting file %2.</source>
+        <translation>Не удалось вызвать %1 или возникла другая ошибка. Истекло время форматирования файла %2.</translation>
     </message>
     <message>
-        <source>Align Bottom</source>
-        <translation>По низу</translation>
+        <source>Cannot read file &quot;%1&quot;: %2.</source>
+        <translation>Невозможно прочитать файл «%1»: %2.</translation>
     </message>
     <message>
-        <source>Same Width</source>
-        <translation>По ширине</translation>
+        <source>Cannot call %1 or some other error occurred.</source>
+        <translation>Не удалось вызвать %1 или возникла другая ошибка.</translation>
     </message>
     <message>
-        <source>Same Height</source>
-        <translation>По высоте</translation>
+        <source>Inspect available fixits</source>
+        <translation>Проверить доступные запросы на исправление (fixit)</translation>
     </message>
     <message>
-        <source>Same Size</source>
-        <translation>По размеру</translation>
+        <source>File &quot;%1&quot; does not exist or is not readable.</source>
+        <translation>Файл «%1» не существует или не читается.</translation>
+    </message>
+    <message>
+        <source>Could not read file &quot;%1&quot;: UnexpectedElementError.</source>
+        <translation>Не удалось прочитать файл «%1»: UnexpectedElementError.</translation>
+    </message>
+    <message>
+        <source>Could not read file &quot;%1&quot;: CustomError.</source>
+        <translation>Не удалось прочитать файл «%1»: CustomError.</translation>
+    </message>
+    <message>
+        <source>Could not read file &quot;%1&quot;: NotWellFormedError.</source>
+        <translation>Не удалось прочитать файл «%1»: NotWellFormedError.</translation>
+    </message>
+    <message>
+        <source>Could not read file &quot;%1&quot;: PrematureEndOfDocumentError.</source>
+        <translation>Не удалось прочитать файл «%1»: PrematureEndOfDocumentError.</translation>
+    </message>
+    <message>
+        <source>File is not a plist version 1.0 file.</source>
+        <translation>Файл не является plist версии 1.0.</translation>
+    </message>
+    <message>
+        <source>Expected a string element.</source>
+        <translation>Ожидается строковый элемент.</translation>
+    </message>
+    <message>
+        <source>Expected an array element.</source>
+        <translation>Ожидается элемент типа массив.</translation>
+    </message>
+    <message>
+        <source>Expected an integer element.</source>
+        <translation>Ожидается целочисленный элемент.</translation>
+    </message>
+    <message>
+        <source>An error occurred with the clang static analyzer process.</source>
+        <translation>Возникла ошибка при статическом анализе Clang.</translation>
+    </message>
+    <message>
+        <source>Clang static analyzer crashed.</source>
+        <translation>Статический анализ Clang завершился крахом.</translation>
+    </message>
+    <message>
+        <source>Clang static analyzer finished with exit code: %1.</source>
+        <translation>Статический анализ Clang завершился с кодом %1.</translation>
+    </message>
+    <message>
+        <source>Command line: &quot;%1&quot;
+Process Error: %2
+Output:
+%3</source>
+        <translation>Командная строка: «%1»
+Ошибка: %2
+Вывод:
+%3</translation>
     </message>
 </context>
 <context>
@@ -25925,7 +27031,7 @@ These files are preserved.</source>
     </message>
     <message>
         <source>Timeout waiting for reply from server.</source>
-        <translation>Вышло время ожидания ответа от сервера.</translation>
+        <translation>Истекло время ожидания ответа от сервера.</translation>
     </message>
     <message>
         <source>No private key file given.</source>
@@ -26104,6 +27210,10 @@ These files are preserved.</source>
         <source>Profiles</source>
         <translation>Профили</translation>
     </message>
+    <message>
+        <source>Version Info</source>
+        <translation>Информация о версии</translation>
+    </message>
 </context>
 <context>
     <name>QbsProjectManager::Internal::CustomQbsPropertiesDialog</name>
@@ -26184,10 +27294,6 @@ These files are preserved.</source>
 </context>
 <context>
     <name>QbsProjectManager::Internal::QbsBuildStepConfigWidget</name>
-    <message>
-        <source>Dry run</source>
-        <translation>Только проверка</translation>
-    </message>
     <message>
         <source>Debug</source>
         <translation>Отладка</translation>
@@ -26244,10 +27350,6 @@ These files are preserved.</source>
         <source>Properties to pass to the project.</source>
         <translation>Свойства, передаваемые проекту.</translation>
     </message>
-    <message>
-        <source>No commands will be executed and no permanent changes to the build graph will be done.</source>
-        <translation>Не будут выполняться команды и вноситься постоянные изменения в граф сборки.</translation>
-    </message>
     <message>
         <source>Keep going when errors occur (if at all possible).</source>
         <translation>Продолжать сборку при ошибках (если возможно).</translation>
@@ -26285,10 +27387,6 @@ These files are preserved.</source>
 </context>
 <context>
     <name>QbsProjectManager::Internal::QbsCleanStepConfigWidget</name>
-    <message>
-        <source>Clean all artifacts</source>
-        <translation>Очистить всё</translation>
-    </message>
     <message>
         <source>Dry run</source>
         <translation>Тестовое выполнение</translation>
@@ -26317,6 +27415,17 @@ These files are preserved.</source>
         <translation>Очистка Qbs</translation>
     </message>
 </context>
+<context>
+    <name>QbsProjectManager::Internal::QbsInfoWidget</name>
+    <message>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>Qbs version:</source>
+        <translation>Версия Qbs:</translation>
+    </message>
+</context>
 <context>
     <name>QbsProjectManager::Internal::QbsInstallStep</name>
     <message>
@@ -26407,6 +27516,10 @@ These files are preserved.</source>
         <source>&amp;Edit...</source>
         <translation>&amp;Изменить...</translation>
     </message>
+    <message>
+        <source>Store profiles in Qt Creator settings directory</source>
+        <translation>Хранить профили в каталоге настроек Qt Creator</translation>
+    </message>
 </context>
 <context>
     <name>QbsProjectManager::Internal::QbsProject</name>
@@ -26976,26 +28089,6 @@ The files in the Android package source directory are copied to the build direct
         <source>Executable:</source>
         <translation>Программа:</translation>
     </message>
-    <message>
-        <source>Arguments:</source>
-        <translation>Параметры:</translation>
-    </message>
-    <message>
-        <source>Select Working Directory</source>
-        <translation>Выбор рабочего каталога</translation>
-    </message>
-    <message>
-        <source>Reset to Default</source>
-        <translation>По умолчанию</translation>
-    </message>
-    <message>
-        <source>Working directory:</source>
-        <translation>Рабочий каталог:</translation>
-    </message>
-    <message>
-        <source>Run in terminal</source>
-        <translation>Запускать в терминале</translation>
-    </message>
     <message>
         <source>Run on QVFb</source>
         <translation>Запускать в QVFb</translation>
@@ -27847,6 +28940,10 @@ Neither the path to the library nor the path to its includes is added to the .pr
         <source>Forms</source>
         <translation>Формы</translation>
     </message>
+    <message>
+        <source>StateCharts</source>
+        <translation type="unfinished">Диаграммы состояний</translation>
+    </message>
     <message>
         <source>Resources</source>
         <translation>Ресурсы</translation>
@@ -27929,22 +29026,6 @@ Neither the path to the library nor the path to its includes is added to the .pr
 </context>
 <context>
     <name>QmlDebug::QmlDebugConnection</name>
-    <message>
-        <source>Connecting to debug server at %1:%2 ...</source>
-        <translation>Подключение к серверу отладки %1:%2 ...</translation>
-    </message>
-</context>
-<context>
-    <name>QmlDebug::QmlDebugConnectionPrivate</name>
-    <message>
-        <source>Error: (%1) %2</source>
-        <extracomment>%1=error code, %2=error message</extracomment>
-        <translation>Ошибка: (%1) %2</translation>
-    </message>
-    <message>
-        <source>&lt;device is gone&gt;</source>
-        <translation>&lt;устройство отсутствует&gt;</translation>
-    </message>
     <message>
         <source>Network connection dropped</source>
         <translation>Разорвано сетевое подключение</translation>
@@ -27973,6 +29054,18 @@ Neither the path to the library nor the path to its includes is added to the .pr
         <source>Socket state changed to ListeningState. This should not happen!</source>
         <translation>Состояние сокета изменилось на ListeningState. Это не должно было произойти!</translation>
     </message>
+    <message>
+        <source>Unknown state %1</source>
+        <translation>Неверное состояние %1</translation>
+    </message>
+    <message>
+        <source>Error: Remote host closed the connection</source>
+        <translation>Ошибка: Удалённый узел закрыл соединение</translation>
+    </message>
+    <message>
+        <source>Error: Unknown socket error %1</source>
+        <translation>Ошибка: Неизвестная ошибка сокета %1</translation>
+    </message>
 </context>
 <context>
     <name>QmlDebug::QmlOutputParser</name>
@@ -28485,8 +29578,8 @@ Neither the path to the library nor the path to its includes is added to the .pr
         <translation>Требуется перезапуск</translation>
     </message>
     <message>
-        <source>The QML emulation layer path changes will take effect after a restart of the QML Emulation layer or Qt Creator.</source>
-        <translation>Изменения в путях слоя эмуляции QML требуют перезапуска эмулятора QML или Qt Creator.</translation>
+        <source>The made changes will take effect after a restart of the QML Emulation layer or Qt Creator.</source>
+        <translation>Изменения вступят в силу после перезапуска слоя эмуляции QML или Qt Creator.</translation>
     </message>
     <message>
         <source>Canvas</source>
@@ -28600,6 +29693,34 @@ Neither the path to the library nor the path to its includes is added to the .pr
         <source>Path where Qt Creator can find the QML emulation layer executable (qmlpuppet).</source>
         <translation>Путь, по которому Qt Creator сможет найти программу слоя эмуляции QML (qmlpuppet).</translation>
     </message>
+    <message>
+        <source>Internationalization</source>
+        <translation>Интернационализация</translation>
+    </message>
+    <message>
+        <source>qsTr()</source>
+        <translation>qsTr()</translation>
+    </message>
+    <message>
+        <source>qsTrId()</source>
+        <translation>qsTrId()</translation>
+    </message>
+    <message>
+        <source>Show property editor warnings</source>
+        <translation>Показывать предупреждения редактора свойств</translation>
+    </message>
+    <message>
+        <source>Forward puppet output:</source>
+        <translation>Перенаправление вывода:</translation>
+    </message>
+    <message>
+        <source>Show warn exceptions</source>
+        <translation>Предупреждающие исключения</translation>
+    </message>
+    <message>
+        <source>Debug puppet:</source>
+        <translation>Отладка эмулятора:</translation>
+    </message>
 </context>
 <context>
     <name>QmlDesigner::InvalidArgumentException</name>
@@ -29167,13 +30288,6 @@ This is independent of the visibility property in QML.</source>
         <translation>Сбросить</translation>
     </message>
 </context>
-<context>
-    <name>QmlDumpBuildTask</name>
-    <message>
-        <source>Building QML Helpers</source>
-        <translation>Сборка помощников QML</translation>
-    </message>
-</context>
 <context>
     <name>QmlEditorWidgets::ContextPaneWidget</name>
     <message>
@@ -30163,70 +31277,6 @@ Qt Creator know about a likely URI.</source>
         <translation>Функции QML</translation>
     </message>
 </context>
-<context>
-    <name>QmlJSTools::Internal::QmlConsoleEdit</name>
-    <message>
-        <source>Cu&amp;t</source>
-        <translation>Выре&amp;зать</translation>
-    </message>
-    <message>
-        <source>&amp;Copy</source>
-        <translation>&amp;Копировать</translation>
-    </message>
-    <message>
-        <source>&amp;Paste</source>
-        <translation>В&amp;ставить</translation>
-    </message>
-    <message>
-        <source>Select &amp;All</source>
-        <translation>Вы&amp;делить всё</translation>
-    </message>
-    <message>
-        <source>C&amp;lear</source>
-        <translation>&amp;Очистить</translation>
-    </message>
-</context>
-<context>
-    <name>QmlJSTools::Internal::QmlConsoleModel</name>
-    <message>
-        <source>Can only evaluate during a QML debug session.</source>
-        <translation>Можно вычислить только во время сессии отладки QML.</translation>
-    </message>
-</context>
-<context>
-    <name>QmlJSTools::Internal::QmlConsolePane</name>
-    <message>
-        <source>Show debug, log, and info messages.</source>
-        <translation>Показывать сообщения уровней: отладка, журнал и информация.</translation>
-    </message>
-    <message>
-        <source>Show warning messages.</source>
-        <translation>Показывать предупреждения.</translation>
-    </message>
-    <message>
-        <source>Show error messages.</source>
-        <translation>Показывать сообщения об ошибках.</translation>
-    </message>
-    <message>
-        <source>QML/JS Console</source>
-        <translation>Консоль QML/JS</translation>
-    </message>
-</context>
-<context>
-    <name>QmlJSTools::Internal::QmlConsoleView</name>
-    <message>
-        <source>&amp;Copy</source>
-        <translation>&amp;Копировать</translation>
-    </message>
-    <message>
-        <source>&amp;Show in Editor</source>
-        <translation>&amp;Показать в редакторе</translation>
-    </message>
-    <message>
-        <source>C&amp;lear</source>
-        <translation>&amp;Очистить</translation>
-    </message>
-</context>
 <context>
     <name>QmlJSTools::Internal::QmlJSToolsPlugin</name>
     <message>
@@ -30402,10 +31452,6 @@ Do you want to retry?</source>
         <source>Debug connection closed</source>
         <translation>Отладочное соединение закрыто</translation>
     </message>
-    <message>
-        <source>Debug connection error %1</source>
-        <translation>Ошибка отладочного подключения %1</translation>
-    </message>
     <message>
         <source>Failed to connect!</source>
         <translation>Не удалось подключиться!</translation>
@@ -30417,36 +31463,106 @@ Do you want to retry?</source>
         <source>Flush data while profiling:</source>
         <translation>Передавать данные при профилировании:</translation>
     </message>
+    <message>
+        <source>Flush interval (ms):</source>
+        <translation>Интервал передачи (мс):</translation>
+    </message>
     <message>
         <source>Periodically flush pending data to Qt Creator. This reduces the delay when loading the
 data and the memory usage in the application. It distorts the profile as the flushing
-itself takes time. </source>
-        <translation>Периодически передавать очередные данные Qt Creator. Это уменьшает задержку
-загрузки данных и использование памяти приложением, но искажает результат
-профилирования, так как передача сама по себе занимает время. </translation>
+itself takes time.</source>
+        <translation>Периодически сбрасывать ожидающие данные в Qt Creator. Это уменьшает
+задержку при загрузке данных и объём используемой приложением памяти.
+Но портит профилирование, так как сброс данных занимает время.</translation>
     </message>
     <message>
-        <source>Flush interval (ms):</source>
-        <translation>Интервал передачи (мс):</translation>
+        <source>Process data only when process ends:</source>
+        <translation>Обрабатывать данные после завершения:</translation>
+    </message>
+    <message>
+        <source>Only process data when the process being profiled ends, not when the current recording
+session ends. This way multiple recording sessions can be aggregated in a single trace,
+for example if multiple QML engines start and stop sequentially during a single run of
+the program.</source>
+        <translation>Обрабатывать данные только после завершения профилируемого процесса, а не
+при окончании сессии записи. Это позволяет объединять несколько сессий записи
+в единую трассировку. Применимо при последовательном запуске/остановке
+нескольких движков QML в рамках одного запуска программы.</translation>
     </message>
 </context>
 <context>
-    <name>QmlProfiler::Internal::QmlProfilerEventRelativesView</name>
+    <name>QmlProfiler::Internal::QmlProfilerFileReader</name>
     <message>
-        <source>&lt;bytecode&gt;</source>
-        <translation>&lt;байтовый код&gt;</translation>
+        <source>Error while parsing trace data file: %1</source>
+        <translation>Ошибка разбора файла данных трассировки: %1</translation>
     </message>
+</context>
+<context>
+    <name>QmlProfiler::Internal::QmlProfilerOptionsPage</name>
     <message>
-        <source>Source code not available</source>
-        <translation>Исходники недоступны</translation>
+        <source>QML Profiler</source>
+        <translation>Профайлер QML</translation>
     </message>
     <message>
-        <source>Part of binding loop.</source>
-        <translation>Часть закольцованных связей.</translation>
+        <source>Analyzer</source>
+        <translation>Анализатор</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfiler::Internal::QmlProfilerRangeModel</name>
+    <message>
+        <source>Duration</source>
+        <translation>Продолжительность</translation>
+    </message>
+    <message>
+        <source>Details</source>
+        <translation>Подробнее</translation>
+    </message>
+    <message>
+        <source>Location</source>
+        <translation>Размещение</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfiler::Internal::QmlProfilerRunControlFactory</name>
+    <message>
+        <source>No executable file to launch.</source>
+        <translation>Нет программы для запуска.</translation>
     </message>
 </context>
 <context>
-    <name>QmlProfiler::Internal::QmlProfilerEventsMainView</name>
+    <name>QmlProfiler::Internal::QmlProfilerStateWidget</name>
+    <message>
+        <source>Profiling application</source>
+        <translation>Профилируемое приложение</translation>
+    </message>
+    <message>
+        <source>No QML events recorded</source>
+        <translation>События QML не записаны</translation>
+    </message>
+    <message>
+        <source>Processing data</source>
+        <translation>Обработка данных</translation>
+    </message>
+    <message>
+        <source>Waiting for more data</source>
+        <translation>Ожидание данных</translation>
+    </message>
+    <message>
+        <source>Clearing old trace</source>
+        <translation>Очистка старой трассировки</translation>
+    </message>
+    <message>
+        <source>Application stopped before loading all data</source>
+        <translation>Приложение остановлено до загрузки всех данных</translation>
+    </message>
+    <message>
+        <source>Waiting for data</source>
+        <translation>Ожидание данных</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfiler::Internal::QmlProfilerStatisticsMainView</name>
     <message>
         <source>&lt;program&gt;</source>
         <translation>&lt;программа&gt;</translation>
@@ -30455,6 +31571,10 @@ itself takes time. </source>
         <source>Main Program</source>
         <translation>Основная программа</translation>
     </message>
+    <message>
+        <source>Binding loop detected.</source>
+        <translation>Обнаружена закольцованность связей.</translation>
+    </message>
     <message>
         <source>&lt;bytecode&gt;</source>
         <translation>&lt;байтовый код&gt;</translation>
@@ -30478,9 +31598,262 @@ references to elements in other files, loops, and so on.)</source>
         <translation>Исходники недоступны</translation>
     </message>
     <message>
-        <source>Binding loop detected.</source>
-        <translation>Обнаружена закольцованность связей.</translation>
+        <source>Paint</source>
+        <translation>Отрисовка</translation>
+    </message>
+    <message>
+        <source>Compile</source>
+        <translation>Компиляция</translation>
+    </message>
+    <message>
+        <source>Create</source>
+        <translation>Создание</translation>
+    </message>
+    <message>
+        <source>Binding</source>
+        <translation>Привязка</translation>
+    </message>
+    <message>
+        <source>Signal</source>
+        <translation>Сигналы</translation>
+    </message>
+    <message>
+        <source>JavaScript</source>
+        <translation>JavaScript</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfiler::Internal::QmlProfilerStatisticsRelativesView</name>
+    <message>
+        <source>&lt;bytecode&gt;</source>
+        <translation>&lt;байтовый код&gt;</translation>
+    </message>
+    <message>
+        <source>Source code not available</source>
+        <translation>Исходники недоступны</translation>
+    </message>
+    <message>
+        <source>Part of binding loop.</source>
+        <translation>Часть закольцованных связей.</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfiler::Internal::QmlProfilerStatisticsView</name>
+    <message>
+        <source>Statistics</source>
+        <translation>Статистика</translation>
+    </message>
+    <message>
+        <source>Copy Row</source>
+        <translation>Скопировать строку</translation>
+    </message>
+    <message>
+        <source>Copy Table</source>
+        <translation>Скопировать таблицу</translation>
+    </message>
+    <message>
+        <source>Extended Event Statistics</source>
+        <translation>Расширенная статистика событий</translation>
+    </message>
+    <message>
+        <source>Show Full Range</source>
+        <translation>Показать весь диапазон</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfiler::Internal::QmlProfilerTool</name>
+    <message>
+        <source>QML Profiler</source>
+        <translation>Профайлер QML</translation>
+    </message>
+    <message>
+        <source>The QML Profiler can be used to find performance bottlenecks in applications using QML.</source>
+        <translation>QML Profiler предназначен для поиска узких мест в приложениях использующих QML.</translation>
+    </message>
+    <message>
+        <source>Load QML Trace</source>
+        <translation>Загрузить трассировку QML</translation>
+    </message>
+    <message>
+        <source>QML Profiler Options</source>
+        <translation>Настройки профайлера QML</translation>
+    </message>
+    <message>
+        <source>Save QML Trace</source>
+        <translation>Сохранить трассировку QML</translation>
+    </message>
+    <message>
+        <source>QML Profiler (External)</source>
+        <translation>Профайлер QML (внешний)</translation>
+    </message>
+    <message>
+        <source>A Qml Profiler analysis is still in progress.</source>
+        <translation>Выполняется профилирование QML.</translation>
+    </message>
+    <message>
+        <source>Start Qml Profiler analysis.</source>
+        <translation>Начать профилирование QML.</translation>
+    </message>
+    <message>
+        <source>%1 s</source>
+        <translation>%1 сек</translation>
+    </message>
+    <message>
+        <source>Elapsed: %1</source>
+        <translation>Прошло: %1</translation>
+    </message>
+    <message>
+        <source>QML traces (*%1)</source>
+        <translation>Трассировки QML (*%1)</translation>
+    </message>
+    <message>
+        <source>You are about to discard the profiling data, including unsaved notes. Do you want to continue?</source>
+        <translation>Продолжить с потерей данных профилирования и несохранённых заметок?</translation>
+    </message>
+    <message>
+        <source>Application finished before loading profiled data.
+Please use the stop button instead.</source>
+        <translation>Приложение завершилось до загрузки данных профилирования.
+В следующий раз используйте кнопку остановки.</translation>
+    </message>
+    <message>
+        <source>Starting a new profiling session will discard the previous data, including unsaved notes.
+Do you want to save the data first?</source>
+        <translation>Запуск новой сессии профилирования уничтожит предыдущие данные и несохранённые заметки.
+Сохранить данные?</translation>
+    </message>
+    <message>
+        <source>Discard data</source>
+        <translation>Отбросить данные</translation>
+    </message>
+    <message>
+        <source>Search timeline event notes.</source>
+        <translation>Искать записи событий timeline.</translation>
+    </message>
+    <message>
+        <source>Hide or show event categories.</source>
+        <translation>Показ или скрытие категорий событий.</translation>
+    </message>
+    <message>
+        <source>Disable profiling</source>
+        <translation>Отключить профилирование</translation>
+    </message>
+    <message>
+        <source>Enable profiling</source>
+        <translation>Включить профилирование</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfiler::Internal::QmlProfilerTraceView</name>
+    <message>
+        <source>Analyze Current Range</source>
+        <translation>Анализировать текущий диапазон</translation>
+    </message>
+    <message>
+        <source>Analyze Full Range</source>
+        <translation>Анализировать весь диапазон</translation>
+    </message>
+    <message>
+        <source>Reset Zoom</source>
+        <translation>Сбросить масштаб</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfiler::Internal::QmlProfilerViewManager</name>
+    <message>
+        <source>Timeline</source>
+        <translation>Временная шкала</translation>
+    </message>
+    <message>
+        <source>QML Profiler</source>
+        <translation>Профайлер QML</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfiler::QmlProfilerDataModel</name>
+    <message>
+        <source>&lt;bytecode&gt;</source>
+        <translation>&lt;байтовый код&gt;</translation>
+    </message>
+    <message>
+        <source>anonymous function</source>
+        <translation>анонимная функция</translation>
+    </message>
+    <message>
+        <source>GUI Thread</source>
+        <translation>Поток GUI</translation>
+    </message>
+    <message>
+        <source> µs</source>
+        <translation> мкс</translation>
+    </message>
+    <message>
+        <source> ms</source>
+        <translation> мс</translation>
+    </message>
+    <message>
+        <source> s</source>
+        <translation> с</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfiler::QmlProfilerModelManager</name>
+    <message>
+        <source>Could not open %1 for writing.</source>
+        <translation>Не удалось открыть %1 для записи.</translation>
     </message>
+    <message>
+        <source>Saving Trace Data</source>
+        <translation>Сохранение данных трассировки</translation>
+    </message>
+    <message>
+        <source>Could not open %1 for reading.</source>
+        <translation>Не удалось открыть %1 для чтения.</translation>
+    </message>
+    <message>
+        <source>Loading Trace Data</source>
+        <translation>Загрузка данных трассировки</translation>
+    </message>
+    <message>
+        <source>Trying to set unknown state in events list.</source>
+        <translation>Попытка установить неизвестное состояние в списке событий.</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfiler::QmlProfilerRunControl</name>
+    <message>
+        <source>Qt Creator</source>
+        <translation>Qt Creator</translation>
+    </message>
+    <message>
+        <source>Could not connect to the in-process QML debugger:
+%1</source>
+        <extracomment>%1 is detailed error message</extracomment>
+        <translation>Не удалось подключиться к внутрипроцессному отладчику QML:
+%1</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfilerExtension::Internal::DebugMessagesModel</name>
+    <message>
+        <source>Unknown Message %1</source>
+        <translation>Неизвестное сообщение %1</translation>
+    </message>
+    <message>
+        <source>Timestamp</source>
+        <translation>Время</translation>
+    </message>
+    <message>
+        <source>Message</source>
+        <translation>Сообщение</translation>
+    </message>
+    <message>
+        <source>Location</source>
+        <translation>Размещение</translation>
+    </message>
+</context>
+<context>
+    <name>QmlProfilerExtension::Internal::FlameGraphModel</name>
     <message>
         <source>Paint</source>
         <translation>Отрисовка</translation>
@@ -30505,263 +31878,227 @@ references to elements in other files, loops, and so on.)</source>
         <source>JavaScript</source>
         <translation>JavaScript</translation>
     </message>
-</context>
-<context>
-    <name>QmlProfiler::Internal::QmlProfilerEventsWidget</name>
-    <message>
-        <source>Copy Row</source>
-        <translation>Скопировать строку</translation>
-    </message>
-    <message>
-        <source>Copy Table</source>
-        <translation>Скопировать таблицу</translation>
-    </message>
-    <message>
-        <source>Extended Event Statistics</source>
-        <translation>Расширенная статистика событий</translation>
-    </message>
     <message>
-        <source>Limit to Current Range</source>
-        <translation>Ограничить текущим диапазоном</translation>
+        <source>Source code not available</source>
+        <translation>Исходники недоступны</translation>
     </message>
+</context>
+<context>
+    <name>QmlProfilerExtension::Internal::FlameGraphView</name>
     <message>
         <source>Show Full Range</source>
         <translation>Показать весь диапазон</translation>
     </message>
 </context>
 <context>
-    <name>QmlProfiler::Internal::QmlProfilerFileReader</name>
+    <name>QmlProfilerExtension::Internal::InputEventsModel</name>
     <message>
-        <source>Error while parsing trace data file: %1</source>
-        <translation>Ошибка разбора файла данных трассировки: %1</translation>
+        <source>Mouse Events</source>
+        <translation>События мыши</translation>
     </message>
-</context>
-<context>
-    <name>QmlProfiler::Internal::QmlProfilerOptionsPage</name>
     <message>
-        <source>QML Profiler</source>
-        <translation>Профайлер QML</translation>
+        <source>Keyboard Events</source>
+        <translation>События клавиатуры</translation>
     </message>
     <message>
-        <source>Analyzer</source>
-        <translation>Анализатор</translation>
+        <source>Timestamp</source>
+        <translation>Время</translation>
     </message>
-</context>
-<context>
-    <name>QmlProfiler::Internal::QmlProfilerPlugin</name>
     <message>
-        <source>QML Profiler</source>
-        <translation>Профайлер QML</translation>
+        <source>Key Press</source>
+        <translation>Нажатие клавиши</translation>
     </message>
     <message>
-        <source>QML Profiler (External)</source>
-        <translation>Профайлер QML (внешний)</translation>
+        <source>Key Release</source>
+        <translation>Отжатие клавиши</translation>
     </message>
-</context>
-<context>
-    <name>QmlProfiler::Internal::QmlProfilerRangeModel</name>
     <message>
-        <source>Duration</source>
-        <translation>Продолжительность</translation>
+        <source>Key</source>
+        <translation>Клавиша</translation>
     </message>
     <message>
-        <source>Details</source>
-        <translation>Подробнее</translation>
+        <source>Modifiers</source>
+        <translation>Модификатор</translation>
     </message>
     <message>
-        <source>Location</source>
-        <translation>Размещение</translation>
+        <source>Double Click</source>
+        <translation>Двойной клик</translation>
     </message>
-</context>
-<context>
-    <name>QmlProfiler::Internal::QmlProfilerStateWidget</name>
     <message>
-        <source>Loading data</source>
-        <translation>Загрузка данных</translation>
+        <source>Mouse Press</source>
+        <translation>Нажатие мыши</translation>
     </message>
     <message>
-        <source>Profiling application</source>
-        <translation>Профилируемое приложение</translation>
+        <source>Mouse Release</source>
+        <translation>Отпускание мыши</translation>
     </message>
     <message>
-        <source>No QML events recorded</source>
-        <translation>События QML не записаны</translation>
+        <source>Button</source>
+        <translation>Кнопка</translation>
     </message>
     <message>
-        <source>Application stopped before loading all data</source>
-        <translation>Приложение остановлено до загрузки всех данных</translation>
+        <source>Result</source>
+        <translation>Результат</translation>
     </message>
     <message>
-        <source>Waiting for data</source>
-        <translation>Ожидание данных</translation>
+        <source>Mouse Move</source>
+        <translation>Движение мыши</translation>
     </message>
-</context>
-<context>
-    <name>QmlProfiler::Internal::QmlProfilerTool</name>
     <message>
-        <source>QML Profiler</source>
-        <translation>Профайлер QML</translation>
+        <source>X</source>
+        <translation>X</translation>
     </message>
     <message>
-        <source>The QML Profiler can be used to find performance bottlenecks in applications using QML.</source>
-        <translation>QML Profiler предназначен для поиска узких мест в приложениях использующих QML.</translation>
+        <source>Y</source>
+        <translation>Y</translation>
     </message>
     <message>
-        <source>Load QML Trace</source>
-        <translation>Загрузить трассировку QML</translation>
+        <source>Mouse Wheel</source>
+        <translation>Колесо мыши</translation>
     </message>
     <message>
-        <source>QML Profiler Options</source>
-        <translation>Настройки профайлера QML</translation>
+        <source>Angle X</source>
+        <translation>Угол X</translation>
     </message>
     <message>
-        <source>Save QML Trace</source>
-        <translation>Сохранить трассировку QML</translation>
+        <source>Angle Y</source>
+        <translation>Угол Y</translation>
     </message>
     <message>
-        <source>%1 s</source>
-        <translation>%1 сек</translation>
+        <source>Keyboard Event</source>
+        <translation>Событие клавиатуры</translation>
     </message>
     <message>
-        <source>Elapsed: %1</source>
-        <translation>Прошло: %1</translation>
+        <source>Mouse Event</source>
+        <translation>Событие мыши</translation>
     </message>
+</context>
+<context>
+    <name>QmlProfilerExtension::Internal::MemoryUsageModel</name>
     <message>
-        <source>QML traces (*%1)</source>
-        <translation>Трассировки QML (*%1)</translation>
+        <source>Memory Allocation</source>
+        <translation>Выделение памяти</translation>
     </message>
     <message>
-        <source>You are about to discard the profiling data, including unsaved notes. Do you want to continue?</source>
-        <translation>Продолжить с потерей данных профилирования и несохранённых заметок?</translation>
+        <source>Memory Usage</source>
+        <translation>Использование памяти</translation>
     </message>
     <message>
-        <source>Application finished before loading profiled data.
-Please use the stop button instead.</source>
-        <translation>Приложение завершилось до загрузки данных профилирования.
-В следующий раз используйте кнопку остановки.</translation>
+        <source>Memory Allocated</source>
+        <translation>Памяти выделено</translation>
     </message>
     <message>
-        <source>Starting a new profiling session will discard the previous data, including unsaved notes.
-Do you want to save the data first?</source>
-        <translation>Запуск новой сессии профилирования уничтожит предыдущие данные и несохранённые заметки.
-Сохранить данные?</translation>
+        <source>Memory Freed</source>
+        <translation>Памяти освобождено</translation>
     </message>
     <message>
-        <source>Discard data</source>
-        <translation>Отбросить данные</translation>
+        <source>Total</source>
+        <translation>Всего</translation>
     </message>
     <message>
-        <source>Search timeline event notes.</source>
-        <translation>Искать записи событий timeline.</translation>
+        <source>Allocated</source>
+        <translation>Выделено</translation>
     </message>
     <message>
-        <source>Hide or show event categories.</source>
-        <translation>Показ или скрытие категорий событий.</translation>
+        <source>Allocations</source>
+        <translation>Выделений</translation>
     </message>
     <message>
-        <source>Disable profiling</source>
-        <translation>Отключить профилирование</translation>
+        <source>Deallocated</source>
+        <translation>Освобождено</translation>
     </message>
     <message>
-        <source>Enable profiling</source>
-        <translation>Включить профилирование</translation>
+        <source>Deallocations</source>
+        <translation>Освобождений</translation>
     </message>
-</context>
-<context>
-    <name>QmlProfiler::Internal::QmlProfilerTraceView</name>
     <message>
-        <source>Limit Events Pane to Current Range</source>
-        <translation>Ограничить панель событий текущим диапазоном</translation>
+        <source>Type</source>
+        <translation>Тип</translation>
     </message>
     <message>
-        <source>Show Full Range in Events Pane</source>
-        <translation>Показать весь диапазон в панели событий</translation>
+        <source>Location</source>
+        <translation>Размещение</translation>
     </message>
     <message>
-        <source>Reset Zoom</source>
-        <translation>Сбросить масштаб</translation>
+        <source>Heap Allocation</source>
+        <translation>Выделение в куче</translation>
     </message>
-</context>
-<context>
-    <name>QmlProfiler::Internal::QmlProfilerViewManager</name>
     <message>
-        <source>Events</source>
-        <translation>События</translation>
+        <source>Large Item Allocation</source>
+        <translation>Выделение под большие объекты</translation>
     </message>
     <message>
-        <source>Timeline</source>
-        <translation>Временная шкала</translation>
+        <source>Heap Usage</source>
+        <translation>Использование кучи</translation>
     </message>
-</context>
-<context>
-    <name>QmlProfiler::LocalQmlProfilerRunner</name>
     <message>
-        <source>No executable file to launch.</source>
-        <translation>Нет программы для запуска.</translation>
+        <source>Unknown</source>
+        <translation>Неизвестно</translation>
     </message>
 </context>
 <context>
-    <name>QmlProfiler::QmlProfilerDataModel</name>
+    <name>QmlProfilerExtension::Internal::PixmapCacheModel</name>
     <message>
-        <source>&lt;bytecode&gt;</source>
-        <translation>&lt;байтовый код&gt;</translation>
+        <source>Image Cached</source>
+        <translation>Изображение закэшировано</translation>
     </message>
     <message>
-        <source>anonymous function</source>
-        <translation>анонимная функция</translation>
+        <source>Image Loaded</source>
+        <translation>Изображение загружено</translation>
     </message>
     <message>
-        <source>GUI Thread</source>
-        <translation>Поток GUI</translation>
+        <source>Result</source>
+        <translation>Результат</translation>
     </message>
     <message>
-        <source> µs</source>
-        <translation> мкс</translation>
+        <source>Load Error</source>
+        <translation>Ошибка загрузки</translation>
     </message>
     <message>
-        <source> ms</source>
-        <translation> мс</translation>
+        <source>Duration</source>
+        <translation>Продолжительность</translation>
     </message>
     <message>
-        <source> s</source>
-        <translation> с</translation>
+        <source>Cache Size</source>
+        <translation>Размер кэша</translation>
     </message>
-</context>
-<context>
-    <name>QmlProfiler::QmlProfilerModelManager</name>
     <message>
-        <source>Could not open %1 for writing.</source>
-        <translation>Не удалось открыть %1 для записи.</translation>
+        <source>File</source>
+        <translation>Файл</translation>
     </message>
     <message>
-        <source>Saving Trace Data</source>
-        <translation>Сохранение данных трассировки</translation>
+        <source>Width</source>
+        <translation>Ширина</translation>
     </message>
     <message>
-        <source>Could not open %1 for reading.</source>
-        <translation>Не удалось открыть %1 для чтения.</translation>
+        <source>Height</source>
+        <translation>Высота</translation>
     </message>
+</context>
+<context>
+    <name>QmlProfilerExtension::Internal::QmlProfilerExtensionPlugin</name>
     <message>
-        <source>Loading Trace Data</source>
-        <translation>Загрузка данных трассировки</translation>
+        <source>Action triggered</source>
+        <translation>Действие сработало</translation>
     </message>
     <message>
-        <source>Trying to set unknown state in events list.</source>
-        <translation>Попытка установить неизвестное состояние в списке событий.</translation>
+        <source>This is an action from QmlProfilerExtension.</source>
+        <translation>Это действие из QmlProfilerExtension.</translation>
     </message>
 </context>
 <context>
-    <name>QmlProfiler::QmlProfilerRunControl</name>
+    <name>QmlProfilerExtension::Internal::SceneGraphTimelineModel</name>
     <message>
-        <source>Qt Creator</source>
-        <translation>Qt Creator</translation>
+        <source>Stage</source>
+        <translation>Этап</translation>
     </message>
     <message>
-        <source>Could not connect to the in-process QML debugger:
-%1</source>
-        <extracomment>%1 is detailed error message</extracomment>
-        <translation>Не удалось подключиться к внутрипроцессному отладчику QML:
-%1</translation>
+        <source>Duration</source>
+        <translation>Продолжительность</translation>
+    </message>
+    <message>
+        <source>Glyphs</source>
+        <translation>Глифы</translation>
     </message>
 </context>
 <context>
@@ -31107,10 +32444,6 @@ Are you sure you want to continue?</source>
         <extracomment>Qt Version is meant for QNX</extracomment>
         <translation>QNX %1</translation>
     </message>
-    <message>
-        <source>QNX</source>
-        <translation>QNX</translation>
-    </message>
     <message>
         <source>No SDK path was set up.</source>
         <translation>Путь к SDK не задан.</translation>
@@ -31413,34 +32746,6 @@ For more details, see /etc/sysctl.d/10-ptrace.conf
         <source>Qt Class Generation</source>
         <translation>Создание класса Qt</translation>
     </message>
-    <message>
-        <source>Desktop</source>
-        <translation>Desktop</translation>
-    </message>
-    <message>
-        <source>Embedded Linux</source>
-        <translation>Встраиваемый Linux</translation>
-    </message>
-    <message>
-        <source>Windows CE</source>
-        <translation>Windows CE</translation>
-    </message>
-    <message>
-        <source>Windows Runtime</source>
-        <translation>WinRT</translation>
-    </message>
-    <message>
-        <source>Windows Phone</source>
-        <translation>Windows Phone</translation>
-    </message>
-    <message>
-        <source>Android</source>
-        <translation>Android</translation>
-    </message>
-    <message>
-        <source>iOS</source>
-        <translation>iOS</translation>
-    </message>
 </context>
 <context>
     <name>QtSupport::CustomExecutableRunConfiguration</name>
@@ -31522,37 +32827,6 @@ cannot be found in the path.</source>
         <translation>Рабочий каталог:</translation>
     </message>
 </context>
-<context>
-    <name>QtSupport::Internal::DebuggingHelper</name>
-    <message>
-        <source>Used to extract QML type information from library-based plugins.</source>
-        <translation>Используется для извлечения информации о типах QML из модулей.</translation>
-    </message>
-    <message>
-        <source>QML Dump:</source>
-        <translation>Дампер QML:</translation>
-    </message>
-    <message>
-        <source>Build</source>
-        <translation>Собрать</translation>
-    </message>
-    <message>
-        <source>Show compiler output of last build.</source>
-        <translation>Показывать вывод компилятора последней сборки.</translation>
-    </message>
-    <message>
-        <source>Show Log</source>
-        <translation>Показать журнал</translation>
-    </message>
-    <message>
-        <source>Build All</source>
-        <translation>Собрать всё</translation>
-    </message>
-    <message>
-        <source>Compiler:</source>
-        <translation>Компилятор:</translation>
-    </message>
-</context>
 <context>
     <name>QtSupport::Internal::ExamplesWelcomePage</name>
     <message>
@@ -31673,27 +32947,6 @@ cannot be found in the path.</source>
         <source>Qmake Not Executable</source>
         <translation>Qmake не запускается</translation>
     </message>
-    <message>
-        <source>Helpers: None available</source>
-        <translation>Помощники отсутствуют</translation>
-    </message>
-    <message>
-        <source>Helpers: %1.</source>
-        <extracomment>%1 is list of tool names.</extracomment>
-        <translation>Помощники: %1.</translation>
-    </message>
-    <message>
-        <source>&lt;i&gt;Not yet built.&lt;/i&gt;</source>
-        <translation>&lt;i&gt;Ещё не создан.&lt;/i&gt;</translation>
-    </message>
-    <message>
-        <source>&lt;i&gt;Not needed.&lt;/i&gt;</source>
-        <translation>&lt;i&gt;Не нужен.&lt;/i&gt;</translation>
-    </message>
-    <message>
-        <source>&lt;i&gt;Cannot be compiled.&lt;/i&gt;</source>
-        <translation>&lt;i&gt;Собрать невозможно.&lt;/i&gt;</translation>
-    </message>
     <message>
         <source>Qt version %1 for %2</source>
         <translation>Qt версии %1 для %2</translation>
@@ -31714,10 +32967,6 @@ cannot be found in the path.</source>
         <source>The following ABIs are currently not supported:&lt;ul&gt;&lt;li&gt;%1&lt;/li&gt;&lt;/ul&gt;</source>
         <translation>Следующие ABI пока не поддерживаются:&lt;ul&gt;&lt;li&gt;%1&lt;/li&gt;&lt;/ul&gt;</translation>
     </message>
-    <message>
-        <source>Building Helpers</source>
-        <translation>Сборка помощников</translation>
-    </message>
     <message>
         <source>Debugging Helper Build Log for &quot;%1&quot;</source>
         <translation>Журнал помощника отладчика для «%1»</translation>
@@ -31864,6 +33113,10 @@ cannot be found in the path.</source>
         <source>unknown</source>
         <translation>неизвестно</translation>
     </message>
+    <message>
+        <source>Path to the qmake executable</source>
+        <translation>Путь к программе qmake</translation>
+    </message>
 </context>
 <context>
     <name>QtSupport::QtVersionFactory</name>
@@ -31951,24 +33204,6 @@ cannot be found in the path.</source>
         <source>No qmlscene installed.</source>
         <translation>qmlscene не установлен.</translation>
     </message>
-    <message>
-        <source>Cannot determine the installation path for Qt version &quot;%1&quot;.</source>
-        <translation>Невозможно определить путь, куда установлена Qt из профиля «%1».</translation>
-    </message>
-    <message>
-        <source>Building helper(s) with toolchain &quot;%1&quot;...
-</source>
-        <translation>Сборка помощника(ов) инструментарием «%1»...
-</translation>
-    </message>
-    <message>
-        <source>Build failed.</source>
-        <translation>Сборка не удалась.</translation>
-    </message>
-    <message>
-        <source>Build succeeded.</source>
-        <translation>Сборка успешно завершена.</translation>
-    </message>
     <message>
         <source>Qt for WinCE</source>
         <comment>Qt Version is meant for WinCE</comment>
@@ -31999,33 +33234,6 @@ cannot be found in the path.</source>
         <translation>Доступ</translation>
     </message>
 </context>
-<context>
-    <name>QuickFixFactory</name>
-    <message>
-        <source>Create Getter and Setter Member Functions</source>
-        <translation>Создать методы получения и установки значения</translation>
-    </message>
-    <message>
-        <source>Create Getter Member Function</source>
-        <translation>Создать метод получения значения</translation>
-    </message>
-    <message>
-        <source>Create Setter Member Function</source>
-        <translation>Создать метод установки значения</translation>
-    </message>
-    <message>
-        <source>Convert to Stack Variable</source>
-        <translation>Преобразовать в стековую переменную</translation>
-    </message>
-    <message>
-        <source>Convert to Pointer</source>
-        <translation>Преобразовать в указатель</translation>
-    </message>
-    <message>
-        <source>Generate Missing Q_PROPERTY Members...</source>
-        <translation>Создание отсутствующих членов Q_PROPERTY...</translation>
-    </message>
-</context>
 <context>
     <name>RadioButtonSpecifics</name>
     <message>
@@ -32277,7 +33485,7 @@ cannot be found in the path.</source>
     </message>
     <message>
         <source>Timeout:</source>
-        <translation>Время ожидания:</translation>
+        <translation>Таймаут:</translation>
     </message>
     <message>
         <source>s</source>
@@ -33146,6 +34354,13 @@ In addition, device connectivity will be tested.</source>
         <translation>Продолжительность</translation>
     </message>
 </context>
+<context>
+    <name>SessionActionLabel</name>
+    <message>
+        <source>Clone</source>
+        <translation>Копировать</translation>
+    </message>
+</context>
 <context>
     <name>SessionItem</name>
     <message>
@@ -33190,10 +34405,6 @@ In addition, device connectivity will be tested.</source>
         <source>Qt Account</source>
         <translation>Учётная запись Qt</translation>
     </message>
-    <message>
-        <source>Qt Cloud Services</source>
-        <translation>Облачные сервисы Qt</translation>
-    </message>
     <message>
         <source>Online Community</source>
         <translation>Онлайн сообщество</translation>
@@ -33402,7 +34613,7 @@ with a password, which you can enter below.</source>
     </message>
     <message>
         <source>Timeout:</source>
-        <translation>Время ожидания:</translation>
+        <translation>Таймаут:</translation>
     </message>
     <message>
         <source>s</source>
@@ -33974,8 +35185,12 @@ with a password, which you can enter below.</source>
         <translation>Файлы в системе</translation>
     </message>
     <message>
-        <source>Directory &quot;%1&quot;:</source>
-        <translation>Каталог «%1»:</translation>
+        <source>Directory</source>
+        <translation>Каталог</translation>
+    </message>
+    <message>
+        <source>%1 &quot;%2&quot;:</source>
+        <translation>%1 «%2»:</translation>
     </message>
     <message>
         <source>Path: %1
@@ -33991,12 +35206,12 @@ Filter: %2
         <translation>&amp;Каталог:</translation>
     </message>
     <message>
-        <source>Fi&amp;le pattern:</source>
-        <translation>Ш&amp;аблон:</translation>
+        <source>Directory to Search</source>
+        <translation>Каталог поиска</translation>
     </message>
     <message>
-        <source>Directory to search</source>
-        <translation>Каталог поиска</translation>
+        <source>Fi&amp;le pattern:</source>
+        <translation>Ш&amp;аблон:</translation>
     </message>
 </context>
 <context>
@@ -34005,6 +35220,10 @@ Filter: %2
         <source>Font &amp;&amp; Colors</source>
         <translation>Шрифт и цвета</translation>
     </message>
+    <message>
+        <source>Color Scheme for Qt Creator Theme &quot;%1&quot;</source>
+        <translation>Цветовая схема темы Qt Creator «%1»</translation>
+    </message>
     <message>
         <source>Copy Color Scheme</source>
         <translation>Копировать цветовую схему</translation>
@@ -34282,6 +35501,14 @@ Specifies how backspace interacts with indentation.
         <source>Pressing Alt displays context-sensitive help or type information as tooltips.</source>
         <translation>При нажатии на Alt показывать справку о контексте или информацию о типе в виде подсказки.</translation>
     </message>
+    <message>
+        <source>Using Select Block Up / Down actions will now provide smarter selections.</source>
+        <translation>При использовании выделения блока вверх/вниз использовать умное выделение.</translation>
+    </message>
+    <message>
+        <source>Enable smart selection changing</source>
+        <translation>Использовать умное выделение</translation>
+    </message>
 </context>
 <context>
     <name>TextEditor::Internal::CodeStyleDialog</name>
@@ -34547,13 +35774,6 @@ Specifies how backspace interacts with indentation.
 %1</translation>
     </message>
 </context>
-<context>
-    <name>TextEditor::Internal::FontSettings</name>
-    <message>
-        <source>Customized</source>
-        <translation>Настроенная</translation>
-    </message>
-</context>
 <context>
     <name>TextEditor::Internal::FontSettingsPage</name>
     <message>
@@ -35289,6 +36509,10 @@ Influences the indentation of continuation lines.
         <source>Select Block Down</source>
         <translation>Выделить блок вниз</translation>
     </message>
+    <message>
+        <source>Ctrl+Shift+Alt+U</source>
+        <translation>Ctrl+Shift+Alt+U</translation>
+    </message>
     <message>
         <source>Go to Line Start</source>
         <translation>Перейти в начало строки</translation>
@@ -35417,6 +36641,33 @@ Influences the indentation of continuation lines.
         <translation>Размер шрифта в точках в текущем документе.</translation>
     </message>
 </context>
+<context>
+    <name>TextEditor::QuickFixFactory</name>
+    <message>
+        <source>Create Getter and Setter Member Functions</source>
+        <translation>Создать методы получения и установки значения</translation>
+    </message>
+    <message>
+        <source>Create Getter Member Function</source>
+        <translation>Создать метод получения значения</translation>
+    </message>
+    <message>
+        <source>Create Setter Member Function</source>
+        <translation>Создать метод установки значения</translation>
+    </message>
+    <message>
+        <source>Convert to Stack Variable</source>
+        <translation>Преобразовать в стековую переменную</translation>
+    </message>
+    <message>
+        <source>Convert to Pointer</source>
+        <translation>Преобразовать в указатель</translation>
+    </message>
+    <message>
+        <source>Generate Missing Q_PROPERTY Members...</source>
+        <translation>Создание отсутствующих членов Q_PROPERTY...</translation>
+    </message>
+</context>
 <context>
     <name>TextEditor::TextDocument</name>
     <message>
@@ -35737,10 +36988,6 @@ Applied to text, if no other rules matching.</source>
         <source>Applied to removed lines in differences (in diff editor).</source>
         <translation>Применяется к удаляемым строкам при сравнении (в редакторе изменений).</translation>
     </message>
-    <message>
-        <source>Zoom: %1%</source>
-        <translation>Масштаб: %1%</translation>
-    </message>
     <message>
         <source>Disabled Code</source>
         <translation>Отключённый код</translation>
@@ -35934,6 +37181,10 @@ Will not be applied to whitespace in comments and strings.</source>
         <source>Select Encoding</source>
         <translation>Выбрать кодировку</translation>
     </message>
+    <message>
+        <source>Zoom: %1%</source>
+        <translation>Масштаб: %1%</translation>
+    </message>
     <message>
         <source>Delete UTF-8 BOM on Save</source>
         <translation>Удалить UTF-8 BOM при сохранении</translation>
@@ -36447,6 +37698,25 @@ Will not be applied to whitespace in comments and strings.</source>
         <translation>Не удалось получить код завершения подчинённого процесса: %1</translation>
     </message>
 </context>
+<context>
+    <name>Utils::DebuggerMainWindow</name>
+    <message>
+        <source>Views</source>
+        <translation>Обзоры</translation>
+    </message>
+    <message>
+        <source>Toolbar</source>
+        <translation>Панель инструментов</translation>
+    </message>
+    <message>
+        <source>Start</source>
+        <translation>Запустить</translation>
+    </message>
+    <message>
+        <source>Stop</source>
+        <translation>Остановить</translation>
+    </message>
+</context>
 <context>
     <name>Utils::DetailsButton</name>
     <message>
@@ -36842,10 +38112,6 @@ Will not be applied to whitespace in comments and strings.</source>
         <source>The path must not be empty.</source>
         <translation>Путь не должен быть пустым.</translation>
     </message>
-    <message>
-        <source>The path &lt;b&gt;%1&lt;/b&gt; is not a directory.</source>
-        <translation>Путь &lt;b&gt;%1&lt;/b&gt; не является каталогом.</translation>
-    </message>
     <message>
         <source>The path &lt;b&gt;%1&lt;/b&gt; is not a file.</source>
         <translation>Путь &lt;b&gt;%1&lt;/b&gt; не является файлом.</translation>
@@ -36888,6 +38154,14 @@ Will not be applied to whitespace in comments and strings.</source>
         <source>A file with that name already exists.</source>
         <translation>Файл с таким именем уже существует.</translation>
     </message>
+    <message>
+        <source>Name is empty.</source>
+        <translation>Имя задано пустым.</translation>
+    </message>
+    <message>
+        <source>Name does not match &quot;%1&quot;.</source>
+        <translation>Имя не соответствует «%1».</translation>
+    </message>
     <message>
         <source>Invalid character &quot;%1&quot; found.</source>
         <translation>Обнаружен недопустимый символ «%1».</translation>
@@ -37152,6 +38426,10 @@ Will not be applied to whitespace in comments and strings.</source>
         <source>The file &lt;i&gt;%1&lt;/i&gt; has changed outside Qt Creator. Do you want to reload it?</source>
         <translation>Файл &lt;i&gt;%1&lt;/i&gt; был изменён вне Qt Creator. Желаете перезагрузить его?</translation>
     </message>
+    <message>
+        <source>&amp;Close</source>
+        <translation>&amp;Закрыть</translation>
+    </message>
 </context>
 <context>
     <name>VCS</name>
@@ -37509,30 +38787,38 @@ Will not be applied to whitespace in comments and strings.</source>
     </message>
 </context>
 <context>
-    <name>Valgrind::Internal::CallgrindToolPrivate</name>
+    <name>Valgrind::Internal::CallgrindTool</name>
     <message>
-        <source>Callers</source>
-        <translation>Вызывающие</translation>
+        <source>Valgrind Function Profile uses the Callgrind tool to record function calls when a program runs.</source>
+        <translation>Профайлер функций Valgrind использует утилиту Callgrind для записи вызовов функций при работе программы.</translation>
     </message>
     <message>
-        <source>Functions</source>
-        <translation>Функции</translation>
+        <source>Valgrind Function Profiler</source>
+        <translation>Профайлер функций Valgrind</translation>
     </message>
     <message>
-        <source>Callees</source>
-        <translation>Вызывемые</translation>
+        <source>Valgrind Function Profiler (External Application)</source>
+        <translation>Профайлер функций Valgrind (внешняя программа)</translation>
+    </message>
+    <message>
+        <source>Profile Costs of This Function and Its Callees</source>
+        <translation>Цены функций и тех, кого они вызывают</translation>
     </message>
     <message>
         <source>Visualization</source>
         <translation>Визуализация</translation>
     </message>
     <message>
-        <source>Go back one step in history. This will select the previously selected item.</source>
-        <translation>Назад на шаг в истории. Выберет предыдущий выбранный элемент.</translation>
+        <source>Callers</source>
+        <translation>Вызывающие</translation>
     </message>
     <message>
-        <source>Reset all event counters.</source>
-        <translation>Сбросить все счётчики событий.</translation>
+        <source>Callees</source>
+        <translation>Вызывемые</translation>
+    </message>
+    <message>
+        <source>Functions</source>
+        <translation>Функции</translation>
     </message>
     <message>
         <source>Load External Log File</source>
@@ -37542,10 +38828,18 @@ Will not be applied to whitespace in comments and strings.</source>
         <source>Request the dumping of profile information. This will update the Callgrind visualization.</source>
         <translation>Запрос на получение данных профилирования. Приведёт к обновлению визуализации Callgrind.</translation>
     </message>
+    <message>
+        <source>Reset all event counters.</source>
+        <translation>Сбросить все счётчики событий.</translation>
+    </message>
     <message>
         <source>Pause event logging. No events are counted which will speed up program execution during profiling.</source>
         <translation>Приостановить запись событий. События не будут записываться, что повысит скорость выполнения программы при профилировании.</translation>
     </message>
+    <message>
+        <source>Go back one step in history. This will select the previously selected item.</source>
+        <translation>Перейти на шаг назад по истории. Выберет предыдущий выбранный элемент.</translation>
+    </message>
     <message>
         <source>Go forward one step in history.</source>
         <translation>Перейти на шаг вперёд по истории.</translation>
@@ -37602,6 +38896,18 @@ Will not be applied to whitespace in comments and strings.</source>
         <source>Filter...</source>
         <translation>Фильтр...</translation>
     </message>
+    <message>
+        <source>Callgrind</source>
+        <translation>Callgrind</translation>
+    </message>
+    <message>
+        <source>A Valgrind Callgrind analysis is still in progress.</source>
+        <translation>Анализ Valgrind Callgrind уже выполняется.</translation>
+    </message>
+    <message>
+        <source>Start a Valgrind Callgrind analysis.</source>
+        <translation>Запуск анализа Valgrind Callgrind.</translation>
+    </message>
     <message>
         <source>Profiling aborted.</source>
         <translation>Профилирование прервано.</translation>
@@ -37687,10 +38993,48 @@ Will not be applied to whitespace in comments and strings.</source>
         <source>Invalid Calls to &quot;free()&quot;</source>
         <translation>Неверный вызов «free()»</translation>
     </message>
+    <message>
+        <source>Memcheck</source>
+        <translation>Memcheck</translation>
+    </message>
     <message>
         <source>Load External XML Log File</source>
         <translation>Загрузить внешний XML файл журнала</translation>
     </message>
+    <message>
+        <source>Valgrind Analyze Memory uses the Memcheck tool to find memory leaks.</source>
+        <translation>Анализатор памяти Valgrind использует утилиту Memcheck для обнаружения утечек памяти.</translation>
+    </message>
+    <message>
+        <source>Valgrind Memory Analyzer</source>
+        <translation>Анализатор памяти Valgrind</translation>
+    </message>
+    <message>
+        <source>Valgrind Memory Analyzer with GDB</source>
+        <translation>Анализатор памяти Valgrind с GDB</translation>
+    </message>
+    <message>
+        <source>Valgrind Analyze Memory with GDB uses the Memcheck tool to find memory leaks.
+When a problem is detected, the application is interrupted and can be debugged.</source>
+        <translation>Анализатор памяти Valgrind с GDB использует утилиту Memcheck для поиска утечек памяти.
+При обнаружении проблем программа останавливается для отладки.</translation>
+    </message>
+    <message>
+        <source>Valgrind Memory Analyzer (External Application)</source>
+        <translation>Анализатор памяти Valgrind (внешняя программа)</translation>
+    </message>
+    <message>
+        <source>A Valgrind Memcheck analysis is still in progress.</source>
+        <translation>Анализатор памяти Valgrind уже выполняется.</translation>
+    </message>
+    <message>
+        <source>Start a Valgrind Memcheck analysis.</source>
+        <translation>Запуск анализатора памяти Valgrind.</translation>
+    </message>
+    <message>
+        <source>Start a Valgrind Memcheck with GDB analysis.</source>
+        <translation>Запуск анализатора памяти Valgrind c GDB.</translation>
+    </message>
     <message>
         <source>Memcheck: Failed to open file for reading: %1</source>
         <translation>Memcheck: Не удалось открыть файл для чтения: %1</translation>
@@ -37699,6 +39043,22 @@ Will not be applied to whitespace in comments and strings.</source>
         <source>Memcheck: Error occurred parsing Valgrind output: %1</source>
         <translation>Memcheck: Ошибка при разборе вывода Valgrind: %1</translation>
     </message>
+    <message numerus="yes">
+        <source>Memory Analyzer Tool finished, %n issues were found.</source>
+        <translation>
+            <numerusform>Анализ памяти завершён, найдена %n проблема.</numerusform>
+            <numerusform>Анализ памяти завершён, найдено %n проблемы.</numerusform>
+            <numerusform>Анализ памяти завершён, найдено %n проблем.</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <source>Log file processed, %n issues were found.</source>
+        <translation>
+            <numerusform>Файл журнала обработан, найдена %n проблема.</numerusform>
+            <numerusform>Файл журнала обработан, найдено %n проблемы.</numerusform>
+            <numerusform>Файл журнала обработан, найдено %n проблем.</numerusform>
+        </translation>
+    </message>
     <message>
         <source>Memory Issues</source>
         <translation>Проблемы памяти</translation>
@@ -37926,47 +39286,6 @@ With cache simulation, further event counters are enabled:
         <translation>Valgrind</translation>
     </message>
 </context>
-<context>
-    <name>Valgrind::Internal::ValgrindPlugin</name>
-    <message>
-        <source>Valgrind Function Profile uses the Callgrind tool to record function calls when a program runs.</source>
-        <translation>Профайлер функций Valgrind использует утилиту Callgrind для записи вызовов функций при работе программы.</translation>
-    </message>
-    <message>
-        <source>Valgrind Analyze Memory uses the Memcheck tool to find memory leaks.</source>
-        <translation>Анализатор памяти Valgrind использует утилиту Memcheck для обнаружения утечек памяти.</translation>
-    </message>
-    <message>
-        <source>Valgrind Analyze Memory with GDB uses the Memcheck tool to find memory leaks.
-When a problem is detected, the application is interrupted and can be debugged.</source>
-        <translation>Анализатор памяти Valgrind с GDB использует утилиту Memcheck для поиска утечек памяти.
-При обнаружении проблем программа останавливается для отладки.</translation>
-    </message>
-    <message>
-        <source>Valgrind Memory Analyzer</source>
-        <translation>Анализатор памяти Valgrind</translation>
-    </message>
-    <message>
-        <source>Valgrind Memory Analyzer with GDB</source>
-        <translation>Анализатор памяти Valgrind с GDB</translation>
-    </message>
-    <message>
-        <source>Valgrind Function Profiler</source>
-        <translation>Профайлер функций Valgrind</translation>
-    </message>
-    <message>
-        <source>Valgrind Memory Analyzer (External Remote Application)</source>
-        <translation>Анализатор памяти Valgrind (внешняя программа)</translation>
-    </message>
-    <message>
-        <source>Valgrind Function Profiler (External Remote Application)</source>
-        <translation>Профайлер функций Valgrind (внешняя программа)</translation>
-    </message>
-    <message>
-        <source>Profile Costs of This Function and Its Callees</source>
-        <translation>Цены функций и тех, кого они вызывают</translation>
-    </message>
-</context>
 <context>
     <name>Valgrind::Internal::ValgrindRunConfigurationAspect</name>
     <message>
@@ -38269,6 +39588,14 @@ should a repository require SSH-authentication (see documentation on SSH and the
         <translation>Файл списка ников в 4-х столбцовом формате mailmap:
 «имя &lt;email&gt; алиас &lt;email&gt;».</translation>
     </message>
+    <message>
+        <source>Reset information about which version control system handles which directory.</source>
+        <translation>Сбросить информацию о системе контроля версий, управляющей этим каталогом.</translation>
+    </message>
+    <message>
+        <source>Reset VCS Cache</source>
+        <translation>Сбросить кэш VCS</translation>
+    </message>
 </context>
 <context>
     <name>VcsBase::Internal::EmailTextCursorHandler</name>
@@ -38829,17 +40156,13 @@ should a repository require SSH-authentication (see documentation on SSH and the
 </context>
 <context>
     <name>WinRt::Internal::WinRtRunConfigurationWidget</name>
-    <message>
-        <source>Arguments:</source>
-        <translation>Параметры:</translation>
-    </message>
     <message>
         <source>Launch App</source>
         <translation>Запуск приложения</translation>
     </message>
     <message>
-        <source>Uninstall package after stop</source>
-        <translation>Удалить пакет после завершения</translation>
+        <source>Uninstall package after application stops</source>
+        <translation>Удалить пакет после завершения приложения</translation>
     </message>
 </context>
 <context>
@@ -38934,6 +40257,13 @@ should a repository require SSH-authentication (see documentation on SSH and the
         <translation>Поиск по примерам...</translation>
     </message>
 </context>
+<context>
+    <name>qmt::ClassItem</name>
+    <message>
+        <source>Show Definition</source>
+        <translation>Показать определение</translation>
+    </message>
+</context>
 <context>
     <name>qmt::DiagramController</name>
     <message>
@@ -39003,6 +40333,10 @@ should a repository require SSH-authentication (see documentation on SSH and the
         <source>Add Element</source>
         <translation>Добавление элемента</translation>
     </message>
+    <message>
+        <source>Relocate Relation</source>
+        <translation>Переместить отношение</translation>
+    </message>
 </context>
 <context>
     <name>qmt::DocumentController</name>
@@ -39023,6 +40357,41 @@ should a repository require SSH-authentication (see documentation on SSH and the
         <translation>Создать диаграмму</translation>
     </message>
 </context>
+<context>
+    <name>qmt::FileCreationException</name>
+    <message>
+        <source>Unable to create file.</source>
+        <translation>Не удалось создать файл.</translation>
+    </message>
+</context>
+<context>
+    <name>qmt::FileNotFoundException</name>
+    <message>
+        <source>File not found.</source>
+        <translation>Файл не найден.</translation>
+    </message>
+</context>
+<context>
+    <name>qmt::FileReadError</name>
+    <message>
+        <source>Reading from file failed.</source>
+        <translation>Не удалось прочитать из файла.</translation>
+    </message>
+</context>
+<context>
+    <name>qmt::FileWriteError</name>
+    <message>
+        <source>Writing to file failed.</source>
+        <translation>Не удалось записать в файл.</translation>
+    </message>
+</context>
+<context>
+    <name>qmt::IllegalXmlFile</name>
+    <message>
+        <source>Illegal XML file.</source>
+        <translation>Неверный файл XML.</translation>
+    </message>
+</context>
 <context>
     <name>qmt::ModelController</name>
     <message>
@@ -39085,6 +40454,72 @@ should a repository require SSH-authentication (see documentation on SSH and the
         <translation>Удалить</translation>
     </message>
 </context>
+<context>
+    <name>qmt::NullPointerException</name>
+    <message>
+        <source>Unacceptable null object.</source>
+        <translation>Недопустимый нулевой объект.</translation>
+    </message>
+</context>
+<context>
+    <name>qmt::ObjectItem</name>
+    <message>
+        <source>Open Diagram</source>
+        <translation>Открыть диаграмму</translation>
+    </message>
+    <message>
+        <source>Create Diagram</source>
+        <translation>Создать диаграмму</translation>
+    </message>
+    <message>
+        <source>Remove</source>
+        <translation>Убрать</translation>
+    </message>
+    <message>
+        <source>Delete</source>
+        <translation>Удалить</translation>
+    </message>
+    <message>
+        <source>Align Objects</source>
+        <translation>Выровнять объекты</translation>
+    </message>
+    <message>
+        <source>Align Left</source>
+        <translation>По левому краю</translation>
+    </message>
+    <message>
+        <source>Center Vertically</source>
+        <translation>По центру вертикально</translation>
+    </message>
+    <message>
+        <source>Align Right</source>
+        <translation>По правому краю</translation>
+    </message>
+    <message>
+        <source>Align Top</source>
+        <translation>По верху</translation>
+    </message>
+    <message>
+        <source>Center Horizontally</source>
+        <translation>По центру горизонтально</translation>
+    </message>
+    <message>
+        <source>Align Bottom</source>
+        <translation>По низу</translation>
+    </message>
+    <message>
+        <source>Same Width</source>
+        <translation>По ширине</translation>
+    </message>
+    <message>
+        <source>Same Height</source>
+        <translation>По высоте</translation>
+    </message>
+    <message>
+        <source>Same Size</source>
+        <translation>По размеру</translation>
+    </message>
+</context>
 <context>
     <name>qmt::ProjectController</name>
     <message>
@@ -39214,10 +40649,6 @@ should a repository require SSH-authentication (see documentation on SSH and the
         <source>Stereotypes:</source>
         <translation>Стереотипы:</translation>
     </message>
-    <message>
-        <source>Reverese engineered:</source>
-        <translation>Реконструировано:</translation>
-    </message>
     <message>
         <source>Name:</source>
         <translation>Имя:</translation>
@@ -39238,6 +40669,10 @@ should a repository require SSH-authentication (see documentation on SSH and the
         <source>Template:</source>
         <translation>Шаблон:</translation>
     </message>
+    <message>
+        <source>Clean Up</source>
+        <translation>Очистить</translation>
+    </message>
     <message>
         <source>Members:</source>
         <translation>Члены:</translation>
@@ -39362,6 +40797,10 @@ should a repository require SSH-authentication (see documentation on SSH and the
         <source>Box</source>
         <translation>Коробкой</translation>
     </message>
+    <message>
+        <source>Reverse engineered:</source>
+        <translation>Реконструировано:</translation>
+    </message>
     <message>
         <source>Angle Brackets</source>
         <translation>Угловыми скобками</translation>
@@ -39410,6 +40849,13 @@ should a repository require SSH-authentication (see documentation on SSH and the
         <translation>[без имени]</translation>
     </message>
 </context>
+<context>
+    <name>qmt::UnknownFileVersion</name>
+    <message>
+        <source>Unable to handle file version %1.</source>
+        <translation>Не удалось обработать файл версии %1.</translation>
+    </message>
+</context>
 <context>
     <name>text</name>
     <message>
diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 00959abc3070f69e3b4b8dbb624dafa4f1ffc93a..078ee96ad8c4c55a8a9a9ee5d9f04678dc6b498e 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -2277,6 +2277,14 @@ ImportInfo ImportInfo::implicitDirectoryImport(const QString &directory)
     return info;
 }
 
+ImportInfo ImportInfo::qrcDirectoryImport(const QString &directory)
+{
+    ImportInfo info;
+    info.m_type = ImportType::QrcDirectory;
+    info.m_path = directory;
+    return info;
+}
+
 bool ImportInfo::isValid() const
 {
     return m_type != ImportType::Invalid;
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index 3d86a5795eb7ef6d1e315c1f0dff0e82d78cb64d..f6a143a49ea771370149e38af9fdc77e0286a9e2 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -1001,6 +1001,7 @@ public:
                                  const QString &as, AST::UiImport *ast = 0);
     static ImportInfo invalidImport(AST::UiImport *ast = 0);
     static ImportInfo implicitDirectoryImport(const QString &directory);
+    static ImportInfo qrcDirectoryImport(const QString &directory);
 
     bool isValid() const;
     ImportType::Enum type() const;
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index 1f3045a675ad88357e15798eac0e8954df50f149..f46b228547b57f7c5a8a7ff3185f5b8fe26fa55e 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -575,16 +575,23 @@ void LinkPrivate::loadQmldirComponents(ObjectValue *import, ComponentVersion ver
 
 void LinkPrivate::loadImplicitDirectoryImports(Imports *imports, Document::Ptr doc)
 {
-    ImportInfo implcitDirectoryImportInfo = ImportInfo::implicitDirectoryImport(doc->path());
-
-    Import directoryImport = importCache.value(ImportCacheKey(implcitDirectoryImportInfo));
-    if (!directoryImport.object) {
-        directoryImport = importFileOrDirectory(doc, implcitDirectoryImportInfo);
+    auto processImport = [this, imports, doc](const ImportInfo &importInfo){
+        Import directoryImport = importCache.value(ImportCacheKey(importInfo));
+        if (!directoryImport.object) {
+            directoryImport = importFileOrDirectory(doc, importInfo);
+            if (directoryImport.object)
+                importCache.insert(ImportCacheKey(importInfo), directoryImport);
+        }
         if (directoryImport.object)
-            importCache.insert(ImportCacheKey(implcitDirectoryImportInfo), directoryImport);
+            imports->append(directoryImport);
+    };
+
+    processImport(ImportInfo::implicitDirectoryImport(doc->path()));
+    foreach (const QString &path,
+             ModelManagerInterface::instance()->qrcPathsForFile(doc->fileName())) {
+        processImport(ImportInfo::qrcDirectoryImport(
+                          QrcParser::qrcDirectoryPathForQrcFilePath(path)));
     }
-    if (directoryImport.object)
-        imports->append(directoryImport);
 }
 
 void LinkPrivate::loadImplicitDefaultImports(Imports *imports)
diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp
index de0ad9d61a51e11d62ac78eb0ad9a7cc3ca4041c..75cea106844a0b623168937c1b5200eac3c6c1c4 100644
--- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp
+++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp
@@ -427,18 +427,21 @@ bool pInfoLessThanImports(const ModelManagerInterface::ProjectInfo &p1, const Mo
 
 }
 
-QStringList ModelManagerInterface::filesAtQrcPath(const QString &path, const QLocale *locale,
-                                         ProjectExplorer::Project *project,
-                                         QrcResourceSelector resources)
+void ModelManagerInterface::iterateQrcFiles(ProjectExplorer::Project *project,
+                                            QrcResourceSelector resources,
+                                            std::function<void(QrcParser::ConstPtr)> callback)
 {
-    QString normPath = QrcParser::normalizedQrcFilePath(path);
     QList<ProjectInfo> pInfos;
-    if (project)
+    if (project) {
         pInfos.append(projectInfo(project));
-    else
+    } else {
         pInfos = projectInfos();
+        if (resources == ActiveQrcResources) // make the result predictable
+            qSort(pInfos.begin(), pInfos.end(), &pInfoLessThanActive);
+        else
+            qSort(pInfos.begin(), pInfos.end(), &pInfoLessThanAll);
+    }
 
-    QStringList res;
     QSet<QString> pathsChecked;
     foreach (const ModelManagerInterface::ProjectInfo &pInfo, pInfos) {
         QStringList qrcFilePaths;
@@ -453,10 +456,31 @@ QStringList ModelManagerInterface::filesAtQrcPath(const QString &path, const QLo
             QrcParser::ConstPtr qrcFile = m_qrcCache.parsedPath(qrcFilePath);
             if (qrcFile.isNull())
                 continue;
-            qrcFile->collectFilesAtPath(normPath, &res, locale);
+            callback(qrcFile);
         }
     }
-    res.sort(); // make the result predictable
+}
+
+QStringList ModelManagerInterface::qrcPathsForFile(const QString &file, const QLocale *locale,
+                                                   ProjectExplorer::Project *project,
+                                                   QrcResourceSelector resources)
+{
+    QStringList res;
+    iterateQrcFiles(project, resources, [&](QrcParser::ConstPtr qrcFile) {
+        qrcFile->collectResourceFilesForSourceFile(file, &res, locale);
+    });
+    return res;
+}
+
+QStringList ModelManagerInterface::filesAtQrcPath(const QString &path, const QLocale *locale,
+                                         ProjectExplorer::Project *project,
+                                         QrcResourceSelector resources)
+{
+    QString normPath = QrcParser::normalizedQrcFilePath(path);
+    QStringList res;
+    iterateQrcFiles(project, resources, [&](QrcParser::ConstPtr qrcFile) {
+        qrcFile->collectFilesAtPath(normPath, &res, locale);
+    });
     return res;
 }
 
@@ -467,35 +491,10 @@ QMap<QString, QStringList> ModelManagerInterface::filesInQrcPath(const QString &
                                                         QrcResourceSelector resources)
 {
     QString normPath = QrcParser::normalizedQrcDirectoryPath(path);
-    QList<ProjectInfo> pInfos;
-    if (project) {
-        pInfos.append(projectInfo(project));
-    } else {
-        pInfos = projectInfos();
-        if (resources == ActiveQrcResources) // make the result predictable
-            qSort(pInfos.begin(), pInfos.end(), &pInfoLessThanActive);
-        else
-            qSort(pInfos.begin(), pInfos.end(), &pInfoLessThanAll);
-    }
     QMap<QString, QStringList> res;
-    QSet<QString> pathsChecked;
-    foreach (const ModelManagerInterface::ProjectInfo &pInfo, pInfos) {
-        QStringList qrcFilePaths;
-        if (resources == ActiveQrcResources)
-            qrcFilePaths = pInfo.activeResourceFiles;
-        else
-            qrcFilePaths = pInfo.allResourceFiles;
-        foreach (const QString &qrcFilePath, qrcFilePaths) {
-            if (pathsChecked.contains(qrcFilePath))
-                continue;
-            pathsChecked.insert(qrcFilePath);
-            QrcParser::ConstPtr qrcFile = m_qrcCache.parsedPath(qrcFilePath);
-
-            if (qrcFile.isNull())
-                continue;
-            qrcFile->collectFilesInPath(normPath, &res, addDirs, locale);
-        }
-    }
+    iterateQrcFiles(project, resources, [&](QrcParser::ConstPtr qrcFile) {
+        qrcFile->collectFilesInPath(normPath, &res, addDirs, locale);
+    });
     return res;
 }
 
diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.h b/src/libs/qmljs/qmljsmodelmanagerinterface.h
index 421a06b7b00d2628282c16924c349428b5fa6e30..142fc54c175900537824657a71b629b25d910a9e 100644
--- a/src/libs/qmljs/qmljsmodelmanagerinterface.h
+++ b/src/libs/qmljs/qmljsmodelmanagerinterface.h
@@ -152,6 +152,9 @@ public:
                            bool emitDocumentOnDiskChanged);
     void fileChangedOnDisk(const QString &path);
     void removeFiles(const QStringList &files);
+    QStringList qrcPathsForFile(const QString &file, const QLocale *locale = 0,
+                                ProjectExplorer::Project *project = 0,
+                                QrcResourceSelector resources = AllQrcResources);
     QStringList filesAtQrcPath(const QString &path, const QLocale *locale = 0,
                                ProjectExplorer::Project *project = 0,
                                QrcResourceSelector resources = AllQrcResources);
@@ -249,6 +252,9 @@ protected:
 
 private:
     void cleanupFutures();
+    void iterateQrcFiles(ProjectExplorer::Project *project,
+                         QrcResourceSelector resources,
+                         std::function<void(QrcParser::ConstPtr)> callback);
 
     mutable QMutex m_mutex;
     QmlJS::Snapshot m_validSnapshot;
diff --git a/src/libs/qmljs/qmljsqrcparser.cpp b/src/libs/qmljs/qmljsqrcparser.cpp
index 7439343f71a98864fa92a1e6ab77906813921907..6b07fc1d135b8d91d4e7682ddaa27b5903e78b4e 100644
--- a/src/libs/qmljs/qmljsqrcparser.cpp
+++ b/src/libs/qmljs/qmljsqrcparser.cpp
@@ -74,6 +74,9 @@ public:
     bool hasDirAtPath(const QString &path, const QLocale *locale = 0) const;
     void collectFilesInPath(const QString &path, QMap<QString,QStringList> *res, bool addDirs = false,
                             const QLocale *locale = 0) const;
+    void collectResourceFilesForSourceFile(const QString &sourceFile, QStringList *res,
+                                           const QLocale *locale = 0) const;
+
     QStringList errorMessages() const;
     QStringList languages() const;
 private:
@@ -81,6 +84,7 @@ private:
     QStringList allUiLanguages(const QLocale *locale) const;
 
     SMap m_resources;
+    SMap m_files;
     QStringList m_languages;
     QStringList m_errorMessages;
 };
@@ -130,6 +134,11 @@ QString QrcParser::normalizedQrcDirectoryPath(const QString &path) {
     return normPath;
 }
 
+QString QrcParser::qrcDirectoryPathForQrcFilePath(const QString &file)
+{
+    return file.left(file.lastIndexOf(QLatin1Char('/')));
+}
+
 QrcParser::QrcParser()
 {
     d = new Internal::QrcParserPrivate(this);
@@ -181,6 +190,12 @@ void QrcParser::collectFilesInPath(const QString &path, QMap<QString,QStringList
     d->collectFilesInPath(path, res, addDirs, locale);
 }
 
+void QrcParser::collectResourceFilesForSourceFile(const QString &sourceFile, QStringList *res,
+                                                  const QLocale *locale) const
+{
+    d->collectResourceFilesForSourceFile(sourceFile, res, locale);
+}
+
 /*! \brief returns the errors found while parsing
  */
 QStringList QrcParser::errorMessages() const
@@ -297,13 +312,12 @@ bool QrcParserPrivate::parseFile(const QString &path)
                 accessPath = language + prefix + alias;
             else
                 accessPath = language + prefix + fileName;
-            if (m_resources.contains(accessPath)) {
-                QStringList &val = m_resources[accessPath];
-                if (!val.contains(filePath))
-                    val.append(filePath);
-            } else {
-                m_resources.insert(accessPath, QStringList(filePath));
-            }
+            QStringList &resources = m_resources[accessPath];
+            if (!resources.contains(filePath))
+                resources.append(filePath);
+            QStringList &files = m_files[filePath];
+            if (!files.contains(accessPath))
+                files.append(accessPath);
         }
     }
     return true;
@@ -388,6 +402,24 @@ void QrcParserPrivate::collectFilesInPath(const QString &path, QMap<QString,QStr
     }
 }
 
+void QrcParserPrivate::collectResourceFilesForSourceFile(const QString &sourceFile,
+                                                         QStringList *results,
+                                                         const QLocale *locale) const
+{
+    QTC_CHECK(sourceFile.startsWith(QLatin1Char('/')));
+    QTC_CHECK(!sourceFile.endsWith(QLatin1Char('/')));
+    QStringList langs = allUiLanguages(locale);
+    SMap::const_iterator file = m_files.find(sourceFile);
+    if (file == m_files.end())
+        return;
+    foreach (const QString &resource, file.value()) {
+        foreach (const QString &language, langs) {
+            if (resource.startsWith(language) && !results->contains(resource))
+                results->append(resource);
+        }
+    }
+}
+
 QStringList QrcParserPrivate::errorMessages() const
 {
     return m_errorMessages;
diff --git a/src/libs/qmljs/qmljsqrcparser.h b/src/libs/qmljs/qmljsqrcparser.h
index b52f874e79213cd661f90ec82fb0bc1b13193c9d..0d9e98fc2a89c598437517cbea619f927b744c5b 100644
--- a/src/libs/qmljs/qmljsqrcparser.h
+++ b/src/libs/qmljs/qmljsqrcparser.h
@@ -52,6 +52,9 @@ public:
     bool hasDirAtPath(const QString &path, const QLocale *locale = 0) const;
     void collectFilesInPath(const QString &path, QMap<QString,QStringList> *res, bool addDirs = false,
                             const QLocale *locale = 0) const;
+    void collectResourceFilesForSourceFile(const QString &sourceFile, QStringList *results,
+                                           const QLocale *locale = 0) const;
+
     QStringList errorMessages() const;
     QStringList languages() const;
     bool isValid() const;
@@ -59,6 +62,7 @@ public:
     static Ptr parseQrcFile(const QString &path);
     static QString normalizedQrcFilePath(const QString &path);
     static QString normalizedQrcDirectoryPath(const QString &path);
+    static QString qrcDirectoryPathForQrcFilePath(const QString &file);
 private:
     QrcParser();
     QrcParser(const QrcParser &);
diff --git a/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp b/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
index fd8f84c566b8d3a56423b05a185b568758e7019d..f3391f7d78960a63b4f7b95bd52d4ba42d916c74 100644
--- a/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
+++ b/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
@@ -275,7 +275,7 @@ extern "C" HRESULT CALLBACK pid(CIDebugClient *client, PCSTR args)
 
     int token;
     commandTokens<StringList>(args, &token);
-    dprintf("Qt Creator CDB extension version 3.6 %d bit.\n",
+    dprintf("Qt Creator CDB extension version 4.0 %d bit.\n",
             sizeof(void *) * 8);
     if (const ULONG pid = currentProcessId(client))
         ExtensionContext::instance().report('R', token, 0, "pid", "%u", pid);
diff --git a/src/libs/utils/icon.cpp b/src/libs/utils/icon.cpp
index e1e641baf730b965a315f277b01292f900387d33..37b6878c963c1e91edcc08a784b9486efda95108 100644
--- a/src/libs/utils/icon.cpp
+++ b/src/libs/utils/icon.cpp
@@ -38,6 +38,9 @@
 
 namespace Utils {
 
+static const qreal PunchEdgeWidth = 0.5;
+static const qreal PunchEdgeIntensity = 0.6;
+
 static QPixmap maskToColorAndAlpha(const QPixmap &mask, const QColor &color)
 {
     QImage result(mask.toImage().convertToFormat(QImage::Format_ARGB32));
@@ -95,9 +98,9 @@ static QPixmap combinedMask(const MasksAndColors &masks, Icon::IconStyleOptions
     for (;maskImage != masks.constEnd(); ++maskImage) {
         if (style & Icon::PunchEdges) {
             p.save();
-            p.setOpacity(0.4);
+            p.setOpacity(PunchEdgeIntensity);
             p.setCompositionMode(QPainter::CompositionMode_Lighten);
-            smearPixmap(&p, maskToColorAndAlpha((*maskImage).first, Qt::white), 0.5);
+            smearPixmap(&p, maskToColorAndAlpha((*maskImage).first, Qt::white), PunchEdgeWidth);
             p.restore();
         }
         p.drawPixmap(0, 0, (*maskImage).first);
@@ -118,9 +121,9 @@ static QPixmap masksToIcon(const MasksAndColors &masks, const QPixmap &combinedM
         if (style & Icon::PunchEdges && maskImage != masks.constBegin()) {
             // Punch a transparent outline around an overlay.
             p.save();
-            p.setOpacity(0.4);
+            p.setOpacity(PunchEdgeIntensity);
             p.setCompositionMode(QPainter::CompositionMode_DestinationOut);
-            smearPixmap(&p, maskToColorAndAlpha((*maskImage).first, Qt::white), 0.5);
+            smearPixmap(&p, maskToColorAndAlpha((*maskImage).first, Qt::white), PunchEdgeWidth);
             p.restore();
         }
         p.drawPixmap(0, 0, maskToColorAndAlpha((*maskImage).first, (*maskImage).second));
diff --git a/src/libs/utils/smallstringmemory.h b/src/libs/utils/smallstringmemory.h
index f44ff6443be82b10ba3efa5fb6c00ac11d271804..4b1b3b4c7a4391edf8bc4717f097429c7bbe351f 100644
--- a/src/libs/utils/smallstringmemory.h
+++ b/src/libs/utils/smallstringmemory.h
@@ -46,13 +46,13 @@ inline void deallocate(char *memory)
 #ifdef WIN32
     _aligned_free(memory);
 #else
-#if defined(__GNUC__) && !defined(__clang__)
 #pragma GCC diagnostic push
+#if defined(__GNUC__) && !defined(__clang__)
 #pragma GCC diagnostic ignored "-Wfree-nonheap-object"
+#endif
     std::free(memory);
 #pragma GCC diagnostic pop
 #endif
-#endif
 }
 
 inline char *reallocate(char *oldMemory, std::size_t newSize)
diff --git a/src/libs/utils/stylehelper.cpp b/src/libs/utils/stylehelper.cpp
index 8de43c24bb32173dc6a6de12d787762876742059..2a07ffac6c13ee16cde394383b55c0cad1bcef11 100644
--- a/src/libs/utils/stylehelper.cpp
+++ b/src/libs/utils/stylehelper.cpp
@@ -286,20 +286,14 @@ void StyleHelper::drawArrow(QStyle::PrimitiveElement element, QPainter *painter,
         return;
 
     const qreal devicePixelRatio = painter->device()->devicePixelRatio();
+    const bool enabled = option->state & QStyle::State_Enabled;
     QRect r = option->rect;
     int size = qMin(r.height(), r.width());
     QPixmap pixmap;
     QString pixmapName;
-    pixmapName.sprintf("arrow-%s-%d-%d-%d-%lld-%f",
-                       "$qt_ia",
-                       uint(option->state), element,
-                       size, option->palette.cacheKey(),
-                       devicePixelRatio);
+    pixmapName.sprintf("StyleHelper::drawArrow-%d-%d-%d-%f",
+                       element, size, enabled, devicePixelRatio);
     if (!QPixmapCache::find(pixmapName, pixmap)) {
-        const QCommonStyle* const style = qobject_cast<QCommonStyle*>(QApplication::style());
-        if (!style)
-            return;
-
         QImage image(size * devicePixelRatio, size * devicePixelRatio, QImage::Format_ARGB32_Premultiplied);
         image.fill(Qt::transparent);
         QPainter painter(&image);
@@ -307,20 +301,22 @@ void StyleHelper::drawArrow(QStyle::PrimitiveElement element, QPainter *painter,
         QStyleOption tweakedOption(*option);
         tweakedOption.state = QStyle::State_Enabled;
 
-        if (!(option->state & QStyle::State_Enabled)) {
-            tweakedOption.palette.setColor(QPalette::ButtonText, option->palette.mid().color());
-            tweakedOption.rect = image.rect();
-            style->QCommonStyle::drawPrimitive(element, &tweakedOption, &painter);
-        } else {
-            tweakedOption.palette.setColor(QPalette::ButtonText, Qt::black);
-            painter.setOpacity(0.2);
-            tweakedOption.rect = image.rect().adjusted(0, devicePixelRatio, 0, devicePixelRatio);
+        auto drawCommonStyleArrow = [&tweakedOption, element, &painter](const QRect &rect, const QColor &color) -> void
+        {
+            static const QCommonStyle* const style = qobject_cast<QCommonStyle*>(QApplication::style());
+            if (!style)
+                return;
+            tweakedOption.palette.setColor(QPalette::ButtonText, color.rgb());
+            tweakedOption.rect = rect;
+            painter.setOpacity(color.alphaF());
             style->QCommonStyle::drawPrimitive(element, &tweakedOption, &painter);
+        };
 
-            tweakedOption.palette.setColor(QPalette::ButtonText, QColor(220, 220, 220));
-            painter.setOpacity(1);
-            tweakedOption.rect = image.rect();
-            style->QCommonStyle::drawPrimitive(element, &tweakedOption, &painter);
+        if (!enabled) {
+            drawCommonStyleArrow(image.rect(), creatorTheme()->color(Theme::IconsDisabledColor));
+        } else {
+            drawCommonStyleArrow(image.rect().translated(0, devicePixelRatio), toolBarDropShadowColor());
+            drawCommonStyleArrow(image.rect(), creatorTheme()->color(Theme::IconsBaseColor));
         }
         painter.end();
         pixmap = QPixmap::fromImage(image);
diff --git a/src/libs/utils/stylehelper.h b/src/libs/utils/stylehelper.h
index e6a1da0302229231d418b1bfe9d58b76422b0c84..0f99e4bf97759f140267ec02f65b57f20ba01136 100644
--- a/src/libs/utils/stylehelper.h
+++ b/src/libs/utils/stylehelper.h
@@ -65,6 +65,8 @@ public:
     static QColor sidebarHighlight() { return QColor(255, 255, 255, 40); }
     static QColor sidebarShadow() { return QColor(0, 0, 0, 40); }
 
+    static QColor toolBarDropShadowColor() { return QColor(0, 0, 0, 70); }
+
     static QColor notTooBrightHighlightColor();
 
     // Sets the base color and makes sure all top level widgets are updated
diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp
index 7ca07b54997b0ab2a9a1f4c1436c7fe6ddd98cdc..81ce2350cf3dc4e4ef70dc07daa2bfa55c5e6e02 100644
--- a/src/plugins/android/androidtoolchain.cpp
+++ b/src/plugins/android/androidtoolchain.cpp
@@ -234,7 +234,7 @@ void AndroidToolChain::setSecondaryToolChain(bool b)
     m_secondaryToolChain = b;
 }
 
-QList<Abi> AndroidToolChain::detectSupportedAbis() const
+GccToolChain::DetectedAbisResult AndroidToolChain::detectSupportedAbis() const
 {
     return QList<Abi>() << targetAbi();
 }
diff --git a/src/plugins/android/androidtoolchain.h b/src/plugins/android/androidtoolchain.h
index 0f15f2db61900bc694169adb3166b5799c3041a3..06d0944956e80de76070e6c7d6b79c0d332a99ed 100644
--- a/src/plugins/android/androidtoolchain.h
+++ b/src/plugins/android/androidtoolchain.h
@@ -59,7 +59,7 @@ public:
     void setSecondaryToolChain(bool b);
 
 protected:
-    QList<ProjectExplorer::Abi> detectSupportedAbis() const override;
+    DetectedAbisResult detectSupportedAbis() const override;
 
 private:
     explicit AndroidToolChain(const ProjectExplorer::Abi &abi, const QString &ndkToolChainVersion, Detection d);
diff --git a/src/plugins/autotest/testcodeparser.cpp b/src/plugins/autotest/testcodeparser.cpp
index 6bb9fd890477cdd7c30917d999045a05ec448c0b..682824744e99c9b686decd9dd52253783b05e6a0 100644
--- a/src/plugins/autotest/testcodeparser.cpp
+++ b/src/plugins/autotest/testcodeparser.cpp
@@ -284,9 +284,10 @@ static QString quickTestSrcDir(const CppTools::CppModelManager *cppMM,
     return QString();
 }
 
-static QString testClass(const CppTools::CppModelManager *modelManager,
-                         CPlusPlus::Document::Ptr &document)
+static QString testClass(const CppTools::CppModelManager *modelManager, const QString &fileName)
 {
+    const QByteArray &fileContent = getFileContent(fileName);
+    CPlusPlus::Document::Ptr document = modelManager->document(fileName);
     const QList<CPlusPlus::Document::MacroUse> macros = document->macroUses();
 
     foreach (const CPlusPlus::Document::MacroUse &macro, macros) {
@@ -295,14 +296,13 @@ static QString testClass(const CppTools::CppModelManager *modelManager,
         const QByteArray name = macro.macro().name();
         if (TestUtils::isQTestMacro(name)) {
             const CPlusPlus::Document::Block arg = macro.arguments().at(0);
-            return QLatin1String(getFileContent(document->fileName())
-                                 .mid(arg.bytesBegin(), arg.bytesEnd() - arg.bytesBegin()));
+            return QLatin1String(fileContent.mid(arg.bytesBegin(),
+                                                 arg.bytesEnd() - arg.bytesBegin()));
         }
     }
     // check if one has used a self-defined macro or QTest::qExec() directly
     const CPlusPlus::Snapshot snapshot = modelManager->snapshot();
-    const QByteArray fileContent = getFileContent(document->fileName());
-    document = snapshot.preprocessedDocument(fileContent, document->fileName());
+    document = snapshot.preprocessedDocument(fileContent, fileName);
     document->check();
     CPlusPlus::AST *ast = document->translationUnit()->ast();
     TestAstVisitor astVisitor(document);
@@ -523,7 +523,7 @@ static void checkDocumentForTestCode(QFutureInterface<TestParseResult> futureInt
     } else if (testCaseNames.contains(fileName) // if we do a reparse
                || (includesQtTest(document, modelManager)
                    && qtTestLibDefined(modelManager, fileName))) {
-        QString testCaseName(testClass(modelManager, document));
+        QString testCaseName(testClass(modelManager, fileName));
         // we might be in a reparse without the original entry point with the QTest::qExec()
         if (testCaseName.isEmpty())
             testCaseName = testCaseNames.value(fileName);
@@ -537,6 +537,10 @@ static void checkDocumentForTestCode(QFutureInterface<TestParseResult> futureInt
 
             TestVisitor visitor(testCaseName);
             visitor.accept(declaringDoc->globalNamespace());
+
+            if (!visitor.resultValid())
+                return;
+
             const QMap<QString, TestCodeLocationAndType> testFunctions = visitor.privateSlots();
 
             QMap<QString, TestCodeLocationList> dataTags =
diff --git a/src/plugins/autotest/testnavigationwidget.cpp b/src/plugins/autotest/testnavigationwidget.cpp
index 963fec32b6fbdea6041c9c1955ae285ccf89f1fc..ddcc53c43c11e0b5f572aac39050a32edb4845e3 100644
--- a/src/plugins/autotest/testnavigationwidget.cpp
+++ b/src/plugins/autotest/testnavigationwidget.cpp
@@ -77,7 +77,7 @@ TestNavigationWidget::TestNavigationWidget(QWidget *parent) :
 
     m_progressTimer = new QTimer(this);
     m_progressTimer->setSingleShot(true);
-    m_progressTimer->setInterval(100); // don't display indicator if progress takes less than 100ms
+    m_progressTimer->setInterval(1000); // don't display indicator if progress takes less than 1s
 
     connect(m_model->parser(), &TestCodeParser::parsingStarted,
             this, &TestNavigationWidget::onParsingStarted);
diff --git a/src/plugins/autotest/testsettings.cpp b/src/plugins/autotest/testsettings.cpp
index 870b35f124ac7460ee514e33707b69de95a17a30..7e8d1911b5e4e5915fc00bdd61e4c8ee441378dd 100644
--- a/src/plugins/autotest/testsettings.cpp
+++ b/src/plugins/autotest/testsettings.cpp
@@ -47,7 +47,7 @@ static const int defaultTimeout = 60000;
 
 TestSettings::TestSettings()
     : timeout(defaultTimeout), metrics(Walltime), omitInternalMssg(true), omitRunConfigWarn(false),
-      limitResultOutput(true), autoScroll(true), alwaysParse(false)
+      limitResultOutput(true), autoScroll(true), alwaysParse(true)
 {
 }
 
@@ -96,7 +96,7 @@ void TestSettings::fromSettings(const QSettings *s)
     omitRunConfigWarn = s->value(root + QLatin1String(omitRunConfigWarnKey), false).toBool();
     limitResultOutput = s->value(root + QLatin1String(limitResultOutputKey), true).toBool();
     autoScroll = s->value(root + QLatin1String(autoScrollKey), true).toBool();
-    alwaysParse = s->value(root + QLatin1String(alwaysParseKey), false).toBool();
+    alwaysParse = s->value(root + QLatin1String(alwaysParseKey), true).toBool();
     gtestRunDisabled = s->value(root + QLatin1String(gtestRunDisabledKey), false).toBool();
     gtestRepeat = s->value(root + QLatin1String(gtestRepeatKey), false).toBool();
     gtestShuffle = s->value(root + QLatin1String(gtestShuffleKey), false).toBool();
diff --git a/src/plugins/autotest/testvisitor.cpp b/src/plugins/autotest/testvisitor.cpp
index c4c9373ca35655df3af1eb3e12f93f1dbe2e8785..a816aa33eb549b285089cfdd75a779ad4d48a5d3 100644
--- a/src/plugins/autotest/testvisitor.cpp
+++ b/src/plugins/autotest/testvisitor.cpp
@@ -73,6 +73,8 @@ bool TestVisitor::visit(CPlusPlus::Class *symbol)
         if (className != m_className)
             continue;
 
+        m_valid = true;
+
         if (const auto func = type->asFunctionType()) {
             if (func->isSlot() && member->isPrivate()) {
                 const QString name = o.prettyName(func->name());
diff --git a/src/plugins/autotest/testvisitor.h b/src/plugins/autotest/testvisitor.h
index f79d612a4c79f734a29055269c626d5a40750cdb..fa2869a44c337b4b4d1607b22fbe482e5c973fbc 100644
--- a/src/plugins/autotest/testvisitor.h
+++ b/src/plugins/autotest/testvisitor.h
@@ -51,6 +51,7 @@ public:
     virtual ~TestVisitor();
 
     QMap<QString, TestCodeLocationAndType> privateSlots() const { return m_privSlots; }
+    bool resultValid() const { return m_valid; }
 
     bool visit(CPlusPlus::Class *symbol);
 
@@ -58,6 +59,7 @@ private:
     CppTools::SymbolFinder m_symbolFinder;
     QString m_className;
     QMap<QString, TestCodeLocationAndType> m_privSlots;
+    bool m_valid = false;
 };
 
 class TestAstVisitor : public CPlusPlus::ASTVisitor
diff --git a/src/plugins/beautifier/beautifierplugin.cpp b/src/plugins/beautifier/beautifierplugin.cpp
index cbd0b96b8b60792f3edf153809920051bc060e6c..dd1fb2c16f6338e9585d029c4602d0b1e0ebfefd 100644
--- a/src/plugins/beautifier/beautifierplugin.cpp
+++ b/src/plugins/beautifier/beautifierplugin.cpp
@@ -59,7 +59,6 @@
 #include <QProcess>
 #include <QScrollBar>
 #include <QTextBlock>
-#include <QTimer>
 #include <QtPlugin>
 
 using namespace TextEditor;
@@ -179,6 +178,7 @@ bool BeautifierPlugin::initialize(const QStringList &arguments, QString *errorSt
 
     Core::ActionContainer *menu = Core::ActionManager::createMenu(Constants::MENU_ID);
     menu->menu()->setTitle(QCoreApplication::translate("Beautifier", Constants::OPTION_TR_CATEGORY));
+    menu->setOnAllDisabledBehavior(Core::ActionContainer::Show);
     Core::ActionManager::actionContainer(Core::Constants::M_TOOLS)->addMenu(menu);
 
     foreach (BeautifierAbstractTool *tool, m_tools) {
@@ -188,9 +188,7 @@ bool BeautifierPlugin::initialize(const QStringList &arguments, QString *errorSt
             addAutoReleasedObject(object);
     }
 
-    // The single shot is needed, otherwise the menu will stay disabled even
-    // when the submenu's actions get enabled later on.
-    QTimer::singleShot(0, this, SLOT(updateActions()));
+    updateActions();
     return true;
 }
 
diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp
index a535656c73707e67216de30132550eddefb59c38..c0e8904d1b4aec9462020fa5e7de0818e378f2b4 100644
--- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp
@@ -280,7 +280,6 @@ IAssistProposal *ClangCompletionAssistProcessor::startCompletionHelper()
     return 0;
 }
 
-// TODO: Extract duplicated logic from InternalCppCompletionAssistProcessor::startOfOperator
 int ClangCompletionAssistProcessor::startOfOperator(int positionInDocument,
                                                     unsigned *kind,
                                                     bool wantFunctionCall) const
@@ -291,96 +290,13 @@ int ClangCompletionAssistProcessor::startOfOperator(int positionInDocument,
                                                             wantFunctionCall);
 
     *kind = activationSequenceProcessor.completionKind();
-
     int start = activationSequenceProcessor.operatorStartPosition();
-    if (start != positionInDocument) {
-        QTextCursor tc(m_interface->textDocument());
-        tc.setPosition(positionInDocument);
-
-        // Include completion: make sure the quote character is the first one on the line
-        if (*kind == T_STRING_LITERAL) {
-            QTextCursor s = tc;
-            s.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor);
-            QString sel = s.selectedText();
-            if (sel.indexOf(QLatin1Char('"')) < sel.length() - 1) {
-                *kind = T_EOF_SYMBOL;
-                start = positionInDocument;
-            }
-        }
-
-        if (*kind == T_COMMA) {
-            ExpressionUnderCursor expressionUnderCursor(m_interface->languageFeatures());
-            if (expressionUnderCursor.startOfFunctionCall(tc) == -1) {
-                *kind = T_EOF_SYMBOL;
-                start = positionInDocument;
-            }
-        }
-
-        SimpleLexer tokenize;
-        tokenize.setLanguageFeatures(m_interface->languageFeatures());
-        tokenize.setSkipComments(false);
-        const Tokens &tokens = tokenize(tc.block().text(), BackwardsScanner::previousBlockState(tc.block()));
-        const int tokenIdx = SimpleLexer::tokenBefore(tokens, qMax(0, tc.positionInBlock() - 1)); // get the token at the left of the cursor
-        const Token tk = (tokenIdx == -1) ? Token() : tokens.at(tokenIdx);
-
-        if (*kind == T_DOXY_COMMENT && !(tk.is(T_DOXY_COMMENT) || tk.is(T_CPP_DOXY_COMMENT))) {
-            *kind = T_EOF_SYMBOL;
-            start = positionInDocument;
-        }
-        // Don't complete in comments or strings, but still check for include completion
-        else if (tk.is(T_COMMENT) || tk.is(T_CPP_COMMENT)
-                 || tk.is(T_CPP_DOXY_COMMENT) || tk.is(T_DOXY_COMMENT)
-                 || (tk.isLiteral() && (*kind != T_STRING_LITERAL
-                                     && *kind != T_ANGLE_STRING_LITERAL
-                                     && *kind != T_SLASH))) {
-            *kind = T_EOF_SYMBOL;
-            start = positionInDocument;
-        }
-        // Include completion: can be triggered by slash, but only in a string
-        else if (*kind == T_SLASH && (tk.isNot(T_STRING_LITERAL) && tk.isNot(T_ANGLE_STRING_LITERAL))) {
-            *kind = T_EOF_SYMBOL;
-            start = positionInDocument;
-        }
-        else if (*kind == T_LPAREN) {
-            if (tokenIdx > 0) {
-                const Token &previousToken = tokens.at(tokenIdx - 1); // look at the token at the left of T_LPAREN
-                switch (previousToken.kind()) {
-                case T_IDENTIFIER:
-                case T_GREATER:
-                case T_SIGNAL:
-                case T_SLOT:
-                    break; // good
-
-                default:
-                    // that's a bad token :)
-                    *kind = T_EOF_SYMBOL;
-                    start = positionInDocument;
-                }
-            }
-        }
-        // Check for include preprocessor directive
-        else if (*kind == T_STRING_LITERAL || *kind == T_ANGLE_STRING_LITERAL || *kind == T_SLASH) {
-            bool include = false;
-            if (tokens.size() >= 3) {
-                if (tokens.at(0).is(T_POUND) && tokens.at(1).is(T_IDENTIFIER) && (tokens.at(2).is(T_STRING_LITERAL) ||
-                                                                                  tokens.at(2).is(T_ANGLE_STRING_LITERAL))) {
-                    const Token &directiveToken = tokens.at(1);
-                    QString directive = tc.block().text().mid(directiveToken.bytesBegin(),
-                                                              directiveToken.bytes());
-                    if (directive == QLatin1String("include") ||
-                            directive == QLatin1String("include_next") ||
-                            directive == QLatin1String("import")) {
-                        include = true;
-                    }
-                }
-            }
 
-            if (!include) {
-                *kind = T_EOF_SYMBOL;
-                start = positionInDocument;
-            }
-        }
-    }
+    CppCompletionAssistProcessor::startOfOperator(m_interface->textDocument(),
+                                                  positionInDocument,
+                                                  kind,
+                                                  start,
+                                                  m_interface->languageFeatures());
 
     return start;
 }
diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp
index e16c7a46c16e425ad2a6036d96e42db32eeb2397..69ff061c83314e72c5c123e63ba9aab09b15a478 100644
--- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp
+++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp
@@ -80,6 +80,7 @@ ClangStaticAnalyzerRunControl::ClangStaticAnalyzerRunControl(
     BuildConfiguration *buildConfiguration = target->activeBuildConfiguration();
     QTC_ASSERT(buildConfiguration, return);
     m_environment = buildConfiguration->environment();
+    m_targetTriple = ToolChainKitInformation::toolChain(target->kit())->originalTargetTriple();
 }
 
 static void prependWordWidthArgumentIfNotIncluded(QStringList *arguments, unsigned char wordWidth)
@@ -96,11 +97,29 @@ static void prependWordWidthArgumentIfNotIncluded(QStringList *arguments, unsign
     QTC_CHECK(!arguments->contains(m32Argument) || !arguments->contains(m64Argument));
 }
 
+static void prependTargetTripleIfNotIncludedAndNotEmpty(QStringList *arguments,
+                                                        const QString &targetTriple)
+{
+    QTC_ASSERT(arguments, return);
+
+    if (targetTriple.isEmpty())
+        return;
+
+    const QString targetOption = QLatin1String("-target");
+
+    if (!arguments->contains(targetOption)) {
+        arguments->prepend(targetTriple);
+        arguments->prepend(targetOption);
+    }
+}
+
 // Removes (1) filePath (2) -o <somePath>.
-// Adds -m64/-m32 argument if not already included.
+// Prepends -m64/-m32 argument if not already included.
+// Prepends -target if not already included.
 static QStringList tweakedArguments(const QString &filePath,
                                     const QStringList &arguments,
-                                    unsigned char wordWidth)
+                                    unsigned char wordWidth,
+                                    const QString &targetTriple)
 {
     QStringList newArguments;
 
@@ -121,6 +140,7 @@ static QStringList tweakedArguments(const QString &filePath,
     QTC_CHECK(skip == false);
 
     prependWordWidthArgumentIfNotIncluded(&newArguments, wordWidth);
+    prependTargetTripleIfNotIncludedAndNotEmpty(&newArguments, targetTriple);
 
     return newArguments;
 }
@@ -147,7 +167,8 @@ class ClangStaticAnalyzerOptionsBuilder : public CompilerOptionsBuilder
 public:
     static QStringList build(const CppTools::ProjectPart &projectPart,
                              CppTools::ProjectFile::Kind fileKind,
-                             unsigned char wordWidth)
+                             unsigned char wordWidth,
+                             const QString &targetTriple)
     {
         ClangStaticAnalyzerOptionsBuilder optionsBuilder(projectPart);
         optionsBuilder.addLanguageOption(fileKind);
@@ -172,6 +193,8 @@ public:
 
         QStringList options = optionsBuilder.options();
         prependWordWidthArgumentIfNotIncluded(&options, wordWidth);
+        prependTargetTripleIfNotIncludedAndNotEmpty(&options, targetTriple);
+
         return options;
     }
 
@@ -217,7 +240,8 @@ private:
 
 static AnalyzeUnits unitsToAnalyzeFromCompilerCallData(
             const ProjectInfo::CompilerCallData &compilerCallData,
-            unsigned char wordWidth)
+            unsigned char wordWidth,
+            const QString &targetTriple)
 {
     qCDebug(LOG) << "Taking arguments for analyzing from CompilerCallData.";
 
@@ -229,7 +253,7 @@ static AnalyzeUnits unitsToAnalyzeFromCompilerCallData(
         const QString file = it.key();
         const QList<QStringList> compilerCalls = it.value();
         foreach (const QStringList &options, compilerCalls) {
-            const QStringList arguments = tweakedArguments(file, options, wordWidth);
+            const QStringList arguments = tweakedArguments(file, options, wordWidth, targetTriple);
             unitsToAnalyze << AnalyzeUnit(file, arguments);
         }
     }
@@ -238,7 +262,8 @@ static AnalyzeUnits unitsToAnalyzeFromCompilerCallData(
 }
 
 static AnalyzeUnits unitsToAnalyzeFromProjectParts(const QList<ProjectPart::Ptr> projectParts,
-                                                   unsigned char wordWidth)
+                                                   unsigned char wordWidth,
+                                                   const QString &targetTriple)
 {
     qCDebug(LOG) << "Taking arguments for analyzing from ProjectParts.";
 
@@ -256,7 +281,8 @@ static AnalyzeUnits unitsToAnalyzeFromProjectParts(const QList<ProjectPart::Ptr>
                 const QStringList arguments
                     = ClangStaticAnalyzerOptionsBuilder::build(*projectPart.data(),
                                                                file.kind,
-                                                               wordWidth);
+                                                               wordWidth,
+                                                               targetTriple);
                 unitsToAnalyze << AnalyzeUnit(file.path, arguments);
             }
         }
@@ -273,9 +299,12 @@ AnalyzeUnits ClangStaticAnalyzerRunControl::sortedUnitsToAnalyze()
     const ProjectInfo::CompilerCallData compilerCallData = m_projectInfo.compilerCallData();
     if (compilerCallData.isEmpty()) {
         units = unitsToAnalyzeFromProjectParts(m_projectInfo.projectParts(),
-                                               m_wordWidth);
+                                               m_wordWidth,
+                                               m_targetTriple);
     } else {
-        units = unitsToAnalyzeFromCompilerCallData(compilerCallData, m_wordWidth);
+        units = unitsToAnalyzeFromCompilerCallData(compilerCallData,
+                                                   m_wordWidth,
+                                                   m_targetTriple);
     }
 
     Utils::sort(units, [](const AnalyzeUnit &a1, const AnalyzeUnit &a2) -> bool {
diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h
index 0d286e17fe46460aa55abfceade480ef8ec8ae5d..f1e5e34c02d3a9d50fc1a4c6d2824672de1e9e0a 100644
--- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h
+++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h
@@ -82,6 +82,7 @@ private:
 private:
     const CppTools::ProjectInfo m_projectInfo;
     const unsigned char m_wordWidth;
+    QString m_targetTriple;
 
     Utils::Environment m_environment;
     QString m_clangExecutable;
diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
index 181ca556a7c2163266df1fd01c2aedc8514c3822..37a0b4c921854019ab8d660bcc6ec13378a1804d 100644
--- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp
+++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
@@ -280,7 +280,9 @@ CMakeConfig BuildDirManager::parsedConfiguration() const
     CMakeConfig result = parseConfiguration(cacheFile, &errorMessage);
     if (!errorMessage.isEmpty())
         emit errorOccured(errorMessage);
-    if (CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", result) != sourceDirectory().toString().toUtf8())
+    const Utils::FileName sourceOfBuildDir
+            = Utils::FileName::fromUtf8(CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", result));
+    if (sourceOfBuildDir != sourceDirectory()) // Use case-insensitive compare where appropriate
         emit errorOccured(tr("The build directory is not for %1").arg(sourceDirectory().toUserOutput()));
 
     return result;
@@ -605,8 +607,10 @@ void BuildDirManager::maybeForceReparse()
     const QByteArray EXTRA_GENERATOR_KEY = "CMAKE_EXTRA_GENERATOR";
     const QByteArray CMAKE_COMMAND_KEY = "CMAKE_COMMAND";
 
-    if (!m_hasData)
+    if (!m_hasData) {
+        forceReparse();
         return;
+    }
 
     const CMakeConfig currentConfig = parsedConfiguration();
 
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index 36046f910047562d00d736230ce99555190afdcf..93593392e96cb7eb03e7532837b5507e9ec9117e 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -63,33 +63,7 @@ const char CONFIGURATION_KEY[] = "CMake.Configuration";
 CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent) :
     BuildConfiguration(parent, Core::Id(Constants::CMAKE_BC_ID))
 {
-    auto project = static_cast<CMakeProject *>(parent->project());
-    setBuildDirectory(shadowBuildDirectory(project->projectFilePath(),
-                                           parent->kit(),
-                                           displayName(), BuildConfiguration::Unknown));
-
-    m_buildDirManager = new BuildDirManager(this);
-    connect(m_buildDirManager, &BuildDirManager::dataAvailable,
-            this, &CMakeBuildConfiguration::dataAvailable);
-    connect(m_buildDirManager, &BuildDirManager::errorOccured,
-            this, &CMakeBuildConfiguration::setError);
-    connect(m_buildDirManager, &BuildDirManager::configurationStarted,
-            this, [this]() { m_completeConfigurationCache.clear(); emit parsingStarted(); });
-
-    connect(this, &CMakeBuildConfiguration::environmentChanged,
-            m_buildDirManager, &BuildDirManager::forceReparse);
-    connect(this, &CMakeBuildConfiguration::buildDirectoryChanged,
-            m_buildDirManager, &BuildDirManager::forceReparse);
-    connect(target(), &Target::kitChanged, this, [this]() {
-        ProjectExplorer::Kit *k = target()->kit();
-        CMakeConfig config = cmakeConfiguration();
-        config.append(CMakeConfigurationKitInformation::configuration(k));  // last value wins...
-        setCMakeConfiguration(config);
-        m_buildDirManager->maybeForceReparse();
-    });
-
-    connect(this, &CMakeBuildConfiguration::parsingStarted, project, &CMakeProject::handleParsingStarted);
-    connect(this, &CMakeBuildConfiguration::dataAvailable, project, &CMakeProject::parseCMakeOutput);
+    ctor();
 }
 
 CMakeBuildConfiguration::~CMakeBuildConfiguration()
@@ -112,7 +86,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent
     BuildConfiguration(parent, source),
     m_configuration(source->m_configuration)
 {
-    Q_ASSERT(parent);
+    ctor();
     cloneSteps(source);
 }
 
@@ -155,6 +129,39 @@ bool CMakeBuildConfiguration::fromMap(const QVariantMap &map)
     return true;
 }
 
+void CMakeBuildConfiguration::ctor()
+{
+    auto project = static_cast<CMakeProject *>(target()->project());
+    setBuildDirectory(shadowBuildDirectory(project->projectFilePath(),
+                                           target()->kit(),
+                                           displayName(), BuildConfiguration::Unknown));
+
+    m_buildDirManager = new BuildDirManager(this);
+    connect(m_buildDirManager, &BuildDirManager::dataAvailable,
+            this, &CMakeBuildConfiguration::dataAvailable);
+    connect(m_buildDirManager, &BuildDirManager::errorOccured,
+            this, &CMakeBuildConfiguration::setError);
+    connect(m_buildDirManager, &BuildDirManager::configurationStarted,
+            this, [this]() { m_completeConfigurationCache.clear(); emit parsingStarted(); });
+
+    connect(this, &CMakeBuildConfiguration::environmentChanged,
+            m_buildDirManager, &BuildDirManager::forceReparse);
+    connect(this, &CMakeBuildConfiguration::buildDirectoryChanged,
+            m_buildDirManager, &BuildDirManager::forceReparse);
+
+    connect(this, &CMakeBuildConfiguration::parsingStarted, project, &CMakeProject::handleParsingStarted);
+    connect(this, &CMakeBuildConfiguration::dataAvailable, project, &CMakeProject::parseCMakeOutput);
+}
+
+void CMakeBuildConfiguration::maybeForceReparse()
+{
+    ProjectExplorer::Kit *k = target()->kit();
+    CMakeConfig config = cmakeConfiguration();
+    config.append(CMakeConfigurationKitInformation::configuration(k));  // last value wins...
+    setCMakeConfiguration(config);
+    m_buildDirManager->maybeForceReparse();
+}
+
 BuildDirManager *CMakeBuildConfiguration::buildDirManager() const
 {
     return m_buildDirManager;
@@ -165,11 +172,6 @@ bool CMakeBuildConfiguration::isParsing() const
     return m_buildDirManager && m_buildDirManager->isParsing();
 }
 
-void CMakeBuildConfiguration::parse()
-{
-    m_buildDirManager->parse();
-}
-
 void CMakeBuildConfiguration::resetData()
 {
     m_buildDirManager->resetData();
@@ -197,7 +199,7 @@ FileName CMakeBuildConfiguration::shadowBuildDirectory(const FileName &projectFi
 
 QList<ConfigModel::DataItem> CMakeBuildConfiguration::completeCMakeConfiguration() const
 {
-    if (m_buildDirManager->isParsing())
+    if (!m_buildDirManager && m_buildDirManager->isParsing())
         return QList<ConfigModel::DataItem>();
 
     if (m_completeConfigurationCache.isEmpty())
@@ -409,14 +411,14 @@ ProjectExplorer::BuildConfiguration *CMakeBuildConfigurationFactory::create(Proj
 
     auto cleanStep = new CMakeBuildStep(cleanSteps);
     cleanSteps->insertStep(0, cleanStep);
-    cleanStep->setBuildTarget(CMakeBuildStep::cleanTarget(), true);
+    cleanStep->setBuildTarget(CMakeBuildStep::cleanTarget());
 
     bc->setBuildDirectory(copy.buildDirectory);
     bc->setCMakeConfiguration(copy.configuration);
 
     // Default to all
-    if (project->hasBuildTarget(QLatin1String("all")))
-        buildStep->setBuildTarget(QLatin1String("all"), true);
+    if (project->hasBuildTarget(CMakeBuildStep::allTarget()))
+        buildStep->setBuildTarget(CMakeBuildStep::allTarget());
 
     return bc;
 }
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
index 1bd00c3b6461e1ed8753dcef8e15d96b18171acb..01a6910240229d285ec52e7ecd115e025a49f9a2 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
@@ -73,7 +73,7 @@ public:
 
     bool isParsing() const;
 
-    void parse();
+    void maybeForceReparse();
     void resetData();
     bool persistCMakeState();
 
@@ -92,6 +92,7 @@ protected:
     bool fromMap(const QVariantMap &map) override;
 
 private:
+    void ctor();
     QList<ConfigModel::DataItem> completeCMakeConfiguration() const;
     void setCurrentCMakeConfiguration(const QList<ConfigModel::DataItem> &items);
 
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
index 6d32868a9f1d7f7031382a42e8f05287ed56bcb2..b4376d86eaf5f6d232756efb4dde06b8f25b95ca 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
@@ -82,9 +82,8 @@ CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, Core::Id id) : AbstractProces
 
 CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, CMakeBuildStep *bs) :
     AbstractProcessStep(bsl, bs),
-    m_buildTargets(bs->m_buildTargets),
-    m_toolArguments(bs->m_toolArguments),
-    m_addRunConfigurationArgument(bs->m_addRunConfigurationArgument)
+    m_buildTarget(bs->m_buildTarget),
+    m_toolArguments(bs->m_toolArguments)
 {
     ctor(bsl);
 }
@@ -125,31 +124,34 @@ CMakeRunConfiguration *CMakeBuildStep::targetsActiveRunConfiguration() const
 
 void CMakeBuildStep::handleBuildTargetChanges()
 {
-    const QStringList filteredTargets
-            = Utils::filtered(static_cast<CMakeProject *>(project())->buildTargetTitles(),
-                              [this](const QString &s) { return m_buildTargets.contains(s); });
-    setBuildTargets(filteredTargets);
+    if (static_cast<CMakeProject *>(project())->buildTargetTitles().contains(m_buildTarget))
+        setBuildTarget(m_buildTarget);
+    else
+        setBuildTarget(CMakeBuildStep::allTarget());
     emit buildTargetsChanged();
 }
 
 QVariantMap CMakeBuildStep::toMap() const
 {
     QVariantMap map(AbstractProcessStep::toMap());
-    map.insert(QLatin1String(BUILD_TARGETS_KEY), m_buildTargets);
+    // Use QStringList for compatibility with old files
+    map.insert(QLatin1String(BUILD_TARGETS_KEY), QStringList(m_buildTarget));
     map.insert(QLatin1String(TOOL_ARGUMENTS_KEY), m_toolArguments);
-    map.insert(QLatin1String(ADD_RUNCONFIGURATION_ARGUMENT_KEY), m_addRunConfigurationArgument);
     return map;
 }
 
 bool CMakeBuildStep::fromMap(const QVariantMap &map)
 {
     if (map.value(QLatin1String(CLEAN_KEY), false).toBool()) {
-        m_buildTargets = QStringList(CMakeBuildStep::cleanTarget());
+        m_buildTarget = CMakeBuildStep::cleanTarget();
     } else {
-        m_buildTargets = map.value(QLatin1String(BUILD_TARGETS_KEY)).toStringList();
+        const QStringList targetList = map.value(QLatin1String(BUILD_TARGETS_KEY)).toStringList();
+        if (!targetList.isEmpty())
+            m_buildTarget = targetList.last();
         m_toolArguments = map.value(QLatin1String(TOOL_ARGUMENTS_KEY)).toString();
     }
-    m_addRunConfigurationArgument = map.value(QLatin1String(ADD_RUNCONFIGURATION_ARGUMENT_KEY), false).toBool();
+    if (map.value(QLatin1String(ADD_RUNCONFIGURATION_ARGUMENT_KEY), false).toBool())
+        m_buildTarget = QLatin1String(ADD_RUNCONFIGURATION_TEXT);
 
     return BuildStep::fromMap(map);
 }
@@ -178,7 +180,7 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps)
     }
 
     CMakeRunConfiguration *rc = targetsActiveRunConfiguration();
-    if (m_addRunConfigurationArgument && (!rc || rc->title().isEmpty())) {
+    if ((m_buildTarget == QLatin1String(ADD_RUNCONFIGURATION_TEXT)) && (!rc || rc->title().isEmpty())) {
         emit addTask(Task(Task::Error,
                           QCoreApplication::translate("ProjectExplorer::Task",
                                     "You asked to build the current Run Configuration's build target only, "
@@ -196,7 +198,7 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps)
 
     QString arguments = allArguments(rc);
 
-    setIgnoreReturnValue(m_buildTargets.contains(CMakeBuildStep::cleanTarget()));
+    setIgnoreReturnValue(m_buildTarget == CMakeBuildStep::cleanTarget());
 
     ProcessParameters *pp = processParameters();
     pp->setMacroExpander(bc->macroExpander());
@@ -292,44 +294,27 @@ void CMakeBuildStep::stdOutput(const QString &line)
         AbstractProcessStep::stdOutput(line);
 }
 
-QStringList CMakeBuildStep::buildTargets() const
+QString CMakeBuildStep::buildTarget() const
 {
-    return m_buildTargets;
+    return m_buildTarget;
 }
 
 bool CMakeBuildStep::buildsBuildTarget(const QString &target) const
 {
-    if (target == tr(ADD_RUNCONFIGURATION_TEXT))
-        return addRunConfigurationArgument();
-    else
-        return m_buildTargets.contains(target);
-}
-
-void CMakeBuildStep::setBuildTarget(const QString &buildTarget, bool on)
-{
-    if (buildTarget == tr(ADD_RUNCONFIGURATION_TEXT)) {
-        setAddRunConfigurationArgument(on);
-    } else {
-        QStringList old = m_buildTargets;
-        if (on && !old.contains(buildTarget))
-            old << buildTarget;
-        else if (!on && old.contains(buildTarget))
-            old.removeOne(buildTarget);
-        setBuildTargets(old);
-    }
+    return target == m_buildTarget;
 }
 
-void CMakeBuildStep::setBuildTargets(const QStringList &targets)
+void CMakeBuildStep::setBuildTarget(const QString &buildTarget)
 {
-    if (targets != m_buildTargets) {
-        m_buildTargets = targets;
-        emit targetsToBuildChanged();
-    }
+    if (m_buildTarget == buildTarget)
+        return;
+    m_buildTarget = buildTarget;
+    emit targetToBuildChanged();
 }
 
 void CMakeBuildStep::clearBuildTargets()
 {
-    m_buildTargets.clear();
+    m_buildTarget.clear();
 }
 
 QString CMakeBuildStep::toolArguments() const
@@ -349,18 +334,20 @@ QString CMakeBuildStep::allArguments(const CMakeRunConfiguration *rc) const
     Utils::QtcProcess::addArg(&arguments, QLatin1String("--build"));
     Utils::QtcProcess::addArg(&arguments, QLatin1String("."));
 
-    if (m_addRunConfigurationArgument) {
-        Utils::QtcProcess::addArg(&arguments, QLatin1String("--target"));
+    QString target;
+
+    if (m_buildTarget == QLatin1String(ADD_RUNCONFIGURATION_TEXT)) {
         if (rc)
-            Utils::QtcProcess::addArg(&arguments, rc->title());
+            target = rc->title();
         else
-            Utils::QtcProcess::addArg(&arguments, QLatin1String("<i>&lt;") + tr(ADD_RUNCONFIGURATION_TEXT) + QLatin1String("&gt;</i>"));
-    }
-    foreach (const QString &t, m_buildTargets) {
-        Utils::QtcProcess::addArg(&arguments, QLatin1String("--target"));
-        Utils::QtcProcess::addArg(&arguments, t);
+            target = QLatin1String("<i>&lt;") + tr(ADD_RUNCONFIGURATION_TEXT) + QLatin1String("&gt;</i>");
+    } else {
+        target = m_buildTarget;
     }
 
+    Utils::QtcProcess::addArg(&arguments, QLatin1String("--target"));
+    Utils::QtcProcess::addArg(&arguments, target);
+
     if (!m_toolArguments.isEmpty()) {
         Utils::QtcProcess::addArg(&arguments, QLatin1String("--"));
         arguments += QLatin1Char(' ') + m_toolArguments;
@@ -369,16 +356,6 @@ QString CMakeBuildStep::allArguments(const CMakeRunConfiguration *rc) const
     return arguments;
 }
 
-bool CMakeBuildStep::addRunConfigurationArgument() const
-{
-    return m_addRunConfigurationArgument;
-}
-
-void CMakeBuildStep::setAddRunConfigurationArgument(bool add)
-{
-    m_addRunConfigurationArgument = add;
-}
-
 QString CMakeBuildStep::cmakeCommand() const
 {
     CMakeTool *tool = CMakeKitInformation::cmakeTool(target()->kit());
@@ -390,6 +367,11 @@ QString CMakeBuildStep::cleanTarget()
     return QLatin1String("clean");
 }
 
+QString CMakeBuildStep::allTarget()
+{
+    return QLatin1String("all");
+}
+
 //
 // CMakeBuildStepConfigWidget
 //
@@ -407,7 +389,6 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
     fl->addRow(tr("Tool arguments:"), m_toolArguments);
     m_toolArguments->setText(m_buildStep->toolArguments());
 
-
     m_buildTargetsList->setFrameStyle(QFrame::NoFrame);
     m_buildTargetsList->setMinimumHeight(200);
 
@@ -420,22 +401,7 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
 
     fl->addRow(tr("Targets:"), frame);
 
-    auto itemAddRunConfigurationArgument = new QListWidgetItem(tr(ADD_RUNCONFIGURATION_TEXT), m_buildTargetsList);
-    itemAddRunConfigurationArgument->setFlags(itemAddRunConfigurationArgument->flags() | Qt::ItemIsUserCheckable);
-    itemAddRunConfigurationArgument->setCheckState(m_buildStep->addRunConfigurationArgument() ? Qt::Checked : Qt::Unchecked);
-    QFont f;
-    f.setItalic(true);
-    itemAddRunConfigurationArgument->setFont(f);
-
-    CMakeProject *pro = static_cast<CMakeProject *>(m_buildStep->project());
-    QStringList targetList = pro->buildTargetTitles();
-    targetList.sort();
-    foreach (const QString &buildTarget, targetList) {
-        auto item = new QListWidgetItem(buildTarget, m_buildTargetsList);
-        item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
-        item->setCheckState(m_buildStep->buildsBuildTarget(item->text()) ? Qt::Checked : Qt::Unchecked);
-    }
-
+    buildTargetsChanged();
     updateDetails();
 
     connect(m_toolArguments, &QLineEdit::textEdited, this, &CMakeBuildStepConfigWidget::toolArgumentsEdited);
@@ -444,8 +410,9 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
             this, &CMakeBuildStepConfigWidget::updateDetails);
 
     connect(m_buildStep, &CMakeBuildStep::buildTargetsChanged, this, &CMakeBuildStepConfigWidget::buildTargetsChanged);
-    connect(m_buildStep, &CMakeBuildStep::targetsToBuildChanged, this, &CMakeBuildStepConfigWidget::selectedBuildTargetsChanged);
-    connect(pro, &CMakeProject::environmentChanged, this, &CMakeBuildStepConfigWidget::updateDetails);
+    connect(m_buildStep, &CMakeBuildStep::targetToBuildChanged, this, &CMakeBuildStepConfigWidget::selectedBuildTargetsChanged);
+    connect(static_cast<CMakeProject *>(m_buildStep->project()), &CMakeProject::environmentChanged,
+            this, &CMakeBuildStepConfigWidget::updateDetails);
 }
 
 void CMakeBuildStepConfigWidget::toolArgumentsEdited()
@@ -456,7 +423,9 @@ void CMakeBuildStepConfigWidget::toolArgumentsEdited()
 
 void CMakeBuildStepConfigWidget::itemChanged(QListWidgetItem *item)
 {
-    m_buildStep->setBuildTarget(item->text(), item->checkState() & Qt::Checked);
+    const QString target =
+            (item->checkState() == Qt::Checked) ? item->data(Qt::UserRole).toString() : CMakeBuildStep::allTarget();
+    m_buildStep->setBuildTarget(target);
     updateDetails();
 }
 
@@ -467,30 +436,44 @@ QString CMakeBuildStepConfigWidget::displayName() const
 
 void CMakeBuildStepConfigWidget::buildTargetsChanged()
 {
-    disconnect(m_buildTargetsList, &QListWidget::itemChanged, this, &CMakeBuildStepConfigWidget::itemChanged);
-
-    auto *addRunConfigurationArgumentItem = m_buildTargetsList->takeItem(0);
+    const bool wasBlocked = m_buildTargetsList->blockSignals(true);
     m_buildTargetsList->clear();
-    m_buildTargetsList->insertItem(0, addRunConfigurationArgumentItem);
 
-    CMakeProject *pro = static_cast<CMakeProject *>(m_buildStep->target()->project());
-    foreach (const QString& buildTarget, pro->buildTargetTitles()) {
+    auto item = new QListWidgetItem(tr(ADD_RUNCONFIGURATION_TEXT), m_buildTargetsList);
+
+    item->setData(Qt::UserRole, QString::fromLatin1(ADD_RUNCONFIGURATION_TEXT));
+    QFont f;
+    f.setItalic(true);
+    item->setFont(f);
+
+    CMakeProject *pro = static_cast<CMakeProject *>(m_buildStep->project());
+    QStringList targetList = pro->buildTargetTitles();
+    targetList.sort();
+
+    foreach (const QString &buildTarget, targetList) {
         auto item = new QListWidgetItem(buildTarget, m_buildTargetsList);
+        item->setData(Qt::UserRole, buildTarget);
+    }
+
+    for (int i = 0; i < m_buildTargetsList->count(); ++i) {
+        QListWidgetItem *item = m_buildTargetsList->item(i);
         item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
-        item->setCheckState(m_buildStep->buildsBuildTarget(item->text()) ? Qt::Checked : Qt::Unchecked);
+        item->setCheckState(m_buildStep->buildsBuildTarget(item->data(Qt::UserRole).toString())
+                            ? Qt::Checked : Qt::Unchecked);
     }
-    connect(m_buildTargetsList, &QListWidget::itemChanged, this, &CMakeBuildStepConfigWidget::itemChanged);
+    m_buildTargetsList->blockSignals(wasBlocked);
     updateSummary();
 }
 
 void CMakeBuildStepConfigWidget::selectedBuildTargetsChanged()
 {
-    disconnect(m_buildTargetsList, &QListWidget::itemChanged, this, &CMakeBuildStepConfigWidget::itemChanged);
+    const bool wasBlocked = m_buildTargetsList->blockSignals(true);
     for (int y = 0; y < m_buildTargetsList->count(); ++y) {
         QListWidgetItem *item = m_buildTargetsList->item(y);
-        item->setCheckState(m_buildStep->buildsBuildTarget(item->text()) ? Qt::Checked : Qt::Unchecked);
+        item->setCheckState(m_buildStep->buildsBuildTarget(item->data(Qt::UserRole).toString())
+                            ? Qt::Checked : Qt::Unchecked);
     }
-    connect(m_buildTargetsList, &QListWidget::itemChanged, this, &CMakeBuildStepConfigWidget::itemChanged);
+    m_buildTargetsList->blockSignals(wasBlocked);
     updateSummary();
 }
 
@@ -541,7 +524,7 @@ BuildStep *CMakeBuildStepFactory::create(BuildStepList *parent, Core::Id id)
         return 0;
     auto step = new CMakeBuildStep(parent);
     if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN)
-        step->setBuildTarget(CMakeBuildStep::cleanTarget(), true);
+        step->setBuildTarget(CMakeBuildStep::cleanTarget());
     return step;
 }
 
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h
index 7f4260551b8635427a9f93fd1d722deaf86cd1eb..8249e1f1f25f4748607ea67cecd3fa9ca0d7b523 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h
@@ -61,10 +61,9 @@ public:
     ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
     bool immutable() const override;
 
-    QStringList buildTargets() const;
+    QString buildTarget() const;
     bool buildsBuildTarget(const QString &target) const;
-    void setBuildTarget(const QString &target, bool on);
-    void setBuildTargets(const QStringList &targets);
+    void setBuildTarget(const QString &target);
     void clearBuildTargets();
 
     QString toolArguments() const;
@@ -72,18 +71,16 @@ public:
 
     QString allArguments(const CMakeRunConfiguration *rc) const;
 
-    bool addRunConfigurationArgument() const;
-    void setAddRunConfigurationArgument(bool add);
-
     QString cmakeCommand() const;
 
     QVariantMap toMap() const override;
 
     static QString cleanTarget();
+    static QString allTarget();
 
 signals:
     void cmakeCommandChanged();
-    void targetsToBuildChanged();
+    void targetToBuildChanged();
     void buildTargetsChanged();
 
 protected:
@@ -112,9 +109,8 @@ private:
     QRegExp m_percentProgress;
     QRegExp m_ninjaProgress;
     QString m_ninjaProgressString;
-    QStringList m_buildTargets;
+    QString m_buildTarget;
     QString m_toolArguments;
-    bool m_addRunConfigurationArgument = false;
     bool m_useNinja = false;
 };
 
diff --git a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp
index 36b4ca661e759b19436d42229d79af9e28eda65d..341330c88ba7f4bfced7b5feace2b13850e98c30 100644
--- a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp
@@ -111,13 +111,13 @@ void CMakeLocatorFilter::accept(Core::LocatorFilterEntry selection) const
         return;
 
     // Change the make step to build only the given target
-    QStringList oldTargets = buildStep->buildTargets();
+    QString oldTarget = buildStep->buildTarget();
     buildStep->clearBuildTargets();
-    buildStep->setBuildTarget(selection.displayName, true);
+    buildStep->setBuildTarget(selection.displayName);
 
     // Build
     ProjectExplorerPlugin::buildProject(cmakeProject);
-    buildStep->setBuildTargets(oldTargets);
+    buildStep->setBuildTarget(oldTarget);
 }
 
 void CMakeLocatorFilter::refresh(QFutureInterface<void> &future)
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index 1bb32c84c02f087565952d465e9897cc69d7d528..4ee11e60743dc817803e62d064e19a51ef5ef08b 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -92,6 +92,8 @@ CMakeProject::CMakeProject(CMakeManager *manager, const FileName &fileName)
     setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX));
 
     rootProjectNode()->setDisplayName(fileName.parentDir().fileName());
+
+    connect(this, &CMakeProject::activeTargetChanged, this, &CMakeProject::handleActiveTargetChanged);
 }
 
 CMakeProject::~CMakeProject()
@@ -439,10 +441,6 @@ Project::RestoreResult CMakeProject::fromMap(const QVariantMap &map, QString *er
     RestoreResult result = Project::fromMap(map, errorMessage);
     if (result != RestoreResult::Ok)
         return result;
-
-    handleActiveTargetChanged();
-    handleActiveBuildConfigurationChanged();
-
     return RestoreResult::Ok;
 }
 
@@ -461,7 +459,8 @@ void CMakeProject::handleActiveTargetChanged()
     if (m_connectedTarget) {
         disconnect(m_connectedTarget, &Target::activeBuildConfigurationChanged,
                    this, &CMakeProject::handleActiveBuildConfigurationChanged);
-
+        disconnect(m_connectedTarget, &Target::kitChanged,
+                   this, &CMakeProject::handleActiveBuildConfigurationChanged);
     }
 
     m_connectedTarget = activeTarget();
@@ -469,7 +468,11 @@ void CMakeProject::handleActiveTargetChanged()
     if (m_connectedTarget) {
         connect(m_connectedTarget, &Target::activeBuildConfigurationChanged,
                 this, &CMakeProject::handleActiveBuildConfigurationChanged);
+        connect(m_connectedTarget, &Target::kitChanged,
+                this, &CMakeProject::handleActiveBuildConfigurationChanged);
     }
+
+    handleActiveBuildConfigurationChanged();
 }
 
 void CMakeProject::handleActiveBuildConfigurationChanged()
@@ -483,7 +486,7 @@ void CMakeProject::handleActiveBuildConfigurationChanged()
             auto i = qobject_cast<CMakeBuildConfiguration *>(bc);
             QTC_ASSERT(i, continue);
             if (i == activeBc)
-                i->parse();
+                i->maybeForceReparse();
             else
                 i->resetData();
         }
diff --git a/src/plugins/coreplugin/core.qrc b/src/plugins/coreplugin/core.qrc
index 46e55fb73bcde779c48f62644eb86f00653a8244..291038d870fad89dd30eb00d09955ab0f11f4c68 100644
--- a/src/plugins/coreplugin/core.qrc
+++ b/src/plugins/coreplugin/core.qrc
@@ -101,16 +101,6 @@
         <file>images/dark_fileicon.png</file>
         <file>images/dark_foldericon.png</file>
         <file>images/Desktop.png</file>
-        <file>images/run_overlay_small.png</file>
-        <file>images/run_overlay_small@2x.png</file>
-        <file>images/stop_overlay_small.png</file>
-        <file>images/stop_overlay_small@2x.png</file>
-        <file>images/debugger_overlay_small.png</file>
-        <file>images/debugger_overlay_small@2x.png</file>
-        <file>images/interrupt_overlay_small.png</file>
-        <file>images/interrupt_overlay_small@2x.png</file>
-        <file>images/continue_overlay_small.png</file>
-        <file>images/continue_overlay_small@2x.png</file>
         <file>images/zoom.png</file>
         <file>images/zoom@2x.png</file>
     </qresource>
diff --git a/src/plugins/coreplugin/coreicons.cpp b/src/plugins/coreplugin/coreicons.cpp
index 4432a3c7040144567e7298a1b46603ac7d02c7ee..3b1d2793344061e9e2c5cd4e63a84fde49648022 100644
--- a/src/plugins/coreplugin/coreicons.cpp
+++ b/src/plugins/coreplugin/coreicons.cpp
@@ -132,18 +132,6 @@ const Icon INFO_TOOLBAR({
         {QLatin1String(":/core/images/info.png"), Theme::IconsInfoToolBarColor}});
 const Icon EXPAND({
         {QLatin1String(":/find/images/expand.png"), Theme::IconsBaseColor}});
-const Icon DEBUG_START_SMALL({
-        {QLatin1String(":/core/images/debugger_overlay_small.png"), Theme::IconsDebugColor},
-        {QLatin1String(":/core/images/run_overlay_small.png"), Theme::IconsRunColor}});
-const Icon DEBUG_EXIT_SMALL({
-        {QLatin1String(":/core/images/debugger_overlay_small.png"), Theme::IconsDebugColor},
-        {QLatin1String(":/core/images/stop_overlay_small.png"), Theme::IconsStopColor}});
-const Icon DEBUG_INTERRUPT_SMALL({
-        {QLatin1String(":/core/images/debugger_overlay_small.png"), Theme::IconsDebugColor},
-        {QLatin1String(":/core/images/interrupt_overlay_small.png"), Theme::IconsInterruptColor}});
-const Icon DEBUG_CONTINUE_SMALL({
-        {QLatin1String(":/core/images/debugger_overlay_small.png"), Theme::IconsDebugColor},
-        {QLatin1String(":/core/images/continue_overlay_small.png"), Theme::IconsRunColor}});
 const Icon ZOOM({
         {QLatin1String(":/core/images/zoom.png"), Theme::IconsBaseColor}});
 const Icon TOOLBAR_EXTENSION({
diff --git a/src/plugins/coreplugin/coreicons.h b/src/plugins/coreplugin/coreicons.h
index b429060546a5ee57ef5223612e88f6240315a64a..25f16636645646f843fffc6994698391ac40b832 100644
--- a/src/plugins/coreplugin/coreicons.h
+++ b/src/plugins/coreplugin/coreicons.h
@@ -82,10 +82,6 @@ CORE_EXPORT extern const Utils::Icon ERROR_TASKBAR;
 CORE_EXPORT extern const Utils::Icon INFO;
 CORE_EXPORT extern const Utils::Icon INFO_TOOLBAR;
 CORE_EXPORT extern const Utils::Icon EXPAND;
-CORE_EXPORT extern const Utils::Icon DEBUG_START_SMALL;
-CORE_EXPORT extern const Utils::Icon DEBUG_EXIT_SMALL;
-CORE_EXPORT extern const Utils::Icon DEBUG_INTERRUPT_SMALL;
-CORE_EXPORT extern const Utils::Icon DEBUG_CONTINUE_SMALL;
 CORE_EXPORT extern const Utils::Icon ZOOM;
 CORE_EXPORT extern const Utils::Icon TOOLBAR_EXTENSION;
 
diff --git a/src/plugins/coreplugin/manhattanstyle.cpp b/src/plugins/coreplugin/manhattanstyle.cpp
index 735eb9e83e3aa4d626715c3b066826831f7ca91e..e25346785dbd7f4c27aac0ce15da518a953c7a69 100644
--- a/src/plugins/coreplugin/manhattanstyle.cpp
+++ b/src/plugins/coreplugin/manhattanstyle.cpp
@@ -666,11 +666,15 @@ void ManhattanStyle::drawControl(ControlElement element, const QStyleOption *opt
 
             if (act) {
                 // Fill|
-                QColor baseColor = StyleHelper::baseColor();
-                QLinearGradient grad(option->rect.topLeft(), option->rect.bottomLeft());
-                grad.setColorAt(0, baseColor.lighter(120));
-                grad.setColorAt(1, baseColor.lighter(130));
-                painter->fillRect(option->rect, grad);
+                if (creatorTheme()->flag(Theme::FlatMenuBar)) {
+                    painter->fillRect(option->rect, creatorTheme()->color(Theme::FancyToolButtonHoverColor));
+                } else {
+                    QColor baseColor = StyleHelper::baseColor();
+                    QLinearGradient grad(option->rect.topLeft(), option->rect.bottomLeft());
+                    grad.setColorAt(0, baseColor.lighter(120));
+                    grad.setColorAt(1, baseColor.lighter(130));
+                    painter->fillRect(option->rect, grad);
+                }
 
                 QPalette pal = mbi->palette;
                 uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine;
@@ -732,7 +736,7 @@ void ManhattanStyle::drawControl(ControlElement element, const QStyleOption *opt
                 if (creatorTheme()->flag(Theme::ComboBoxDrawTextShadow)
                     && (option->state & State_Enabled))
                 {
-                    painter->setPen(QColor(0, 0, 0, 70));
+                    painter->setPen(StyleHelper::toolBarDropShadowColor());
                     painter->drawText(editRect.adjusted(1, 0, -1, 0), Qt::AlignLeft | Qt::AlignVCenter, text);
                 }
                 if (!(option->state & State_Enabled))
diff --git a/src/plugins/coreplugin/variablechooser.cpp b/src/plugins/coreplugin/variablechooser.cpp
index a420301303f8edad274aaea61a2bd3f7823c31e9..bf58630a6137bcdd7ef5c9fde17d7a721a0ebddd 100644
--- a/src/plugins/coreplugin/variablechooser.cpp
+++ b/src/plugins/coreplugin/variablechooser.cpp
@@ -240,14 +240,17 @@ VariableChooserPrivate::VariableChooserPrivate(VariableChooser *parent)
     : q(parent),
       m_lineEdit(0),
       m_textEdit(0),
-      m_plainTextEdit(0)
+      m_plainTextEdit(0),
+      m_iconButton(0),
+      m_variableTree(0),
+      m_variableDescription(0)
 {
     m_defaultDescription = VariableChooser::tr("Select a variable to insert.");
 
     m_variableTree = new VariableTreeView(q, this);
-    m_variableTree->setModel(&m_model);
-
     m_variableDescription = new QLabel(q);
+
+    m_variableTree->setModel(&m_model);
     m_variableDescription->setText(m_defaultDescription);
     m_variableDescription->setMinimumSize(QSize(0, 60));
     m_variableDescription->setAlignment(Qt::AlignLeft|Qt::AlignTop);
@@ -403,7 +406,8 @@ void VariableChooser::addSupportForChildWidgets(QWidget *parent, MacroExpander *
  */
 void VariableChooserPrivate::updateDescription(const QModelIndex &index)
 {
-    m_variableDescription->setText(m_model.data(index, Qt::ToolTipRole).toString());
+    if (m_variableDescription)
+        m_variableDescription->setText(m_model.data(index, Qt::ToolTipRole).toString());
 }
 
 /*!
diff --git a/src/plugins/cppeditor/cppincludehierarchy_test.cpp b/src/plugins/cppeditor/cppincludehierarchy_test.cpp
index ffef3a8b35ec696a2aee736bb5ba5ed0e6d25345..8bb29f4123ef5a87a3ec22d593c71e8c745a373b 100644
--- a/src/plugins/cppeditor/cppincludehierarchy_test.cpp
+++ b/src/plugins/cppeditor/cppincludehierarchy_test.cpp
@@ -35,8 +35,6 @@
 #include <QList>
 #include <QtTest>
 
-Q_DECLARE_METATYPE(QList<QByteArray>)
-
 using namespace CPlusPlus;
 using namespace CppTools;
 
diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp
index b592d9f9da86162ef5de4f14cd9018a30ff838dc..ddd2b5097d4d4e8d4311e26b68ba589315ce86eb 100644
--- a/src/plugins/cppeditor/cppquickfix_test.cpp
+++ b/src/plugins/cppeditor/cppquickfix_test.cpp
@@ -315,8 +315,6 @@ typedef QSharedPointer<CppQuickFixFactory> CppQuickFixFactoryPtr;
 
 } // namespace CppEditor
 
-Q_DECLARE_METATYPE(CppEditor::CppQuickFixFactoryPtr)
-
 namespace CppEditor {
 namespace Internal {
 
diff --git a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
index c5bbf1f4499c2dfbd8f2eb1e672767160abf5e06..b2e1c982949d8f409ca91392448335b19e2fc77f 100644
--- a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
+++ b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
@@ -89,7 +89,6 @@ public:
 };
 typedef QList<OverrideItem> OverrideItemList;
 Q_DECLARE_METATYPE(OverrideItem)
-Q_DECLARE_METATYPE(OverrideItemList)
 
 inline bool operator==(const OverrideItem &lhs, const OverrideItem &rhs)
 {
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp
index ad12c5b621df60cbed331534755933df4495e54c..27cb35739eae22a7db0d97392906dec9e222f823 100644
--- a/src/plugins/cpptools/cppcompletion_test.cpp
+++ b/src/plugins/cpptools/cppcompletion_test.cpp
@@ -24,6 +24,7 @@
 ****************************************************************************/
 
 #include "cppcompletionassist.h"
+#include "cppdoxygen.h"
 #include "cppmodelmanager.h"
 #include "cpptoolsplugin.h"
 #include "cpptoolstestcase.h"
@@ -110,6 +111,8 @@ public:
                                                ExplicitlyInvoked, m_snapshot,
                                                ProjectPartHeaderPaths(),
                                                languageFeatures);
+        ai->prepareForAsyncUse();
+        ai->recreateTextDocument();
         InternalCppCompletionAssistProcessor processor;
 
         const Tests::IAssistProposalScopedPointer proposal(processor.perform(ai));
@@ -171,6 +174,17 @@ bool isProbablyGlobalCompletion(const QStringList &list)
         && list.contains(QLatin1String("bool"));
 }
 
+bool isDoxygenTagCompletion(const QStringList &list)
+{
+    for (int i = 1; i < T_DOXY_LAST_TAG; ++i) {
+        const QString doxygenTag = QString::fromLatin1(doxygenTagSpell(i));
+        if (!list.contains(doxygenTag))
+            return false;
+    }
+
+    return true;
+}
+
 } // anonymous namespace
 
 void CppToolsPlugin::test_completion_basic_1()
@@ -384,6 +398,34 @@ void CppToolsPlugin::test_global_completion()
     QVERIFY(completions.toSet().contains(requiredCompletionItems.toSet()));
 }
 
+void CppToolsPlugin::test_doxygen_tag_completion_data()
+{
+    QTest::addColumn<QByteArray>("code");
+
+    QTest::newRow("C++ comment")
+         << _("/// @");
+
+    QTest::newRow("C comment single line")
+         << _("/*! @ */");
+
+    QTest::newRow("C comment multi line")
+         << _("/*! text\n"
+              " *  @\n"
+              " */\n");
+}
+
+void CppToolsPlugin::test_doxygen_tag_completion()
+{
+    QFETCH(QByteArray, code);
+
+    const QByteArray prefix = "\\";
+
+    CompletionTestCase test(code, prefix);
+    QVERIFY(test.succeededSoFar());
+    const QStringList completions = test.getCompletions();
+    QVERIFY(isDoxygenTagCompletion(completions));
+}
+
 static void enumTestCase(const QByteArray &tag, const QByteArray &source,
                          const QByteArray &prefix = QByteArray())
 {
diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp
index b5b986eed797c88a6ede89fbff47ac96f473e6e6..c801fd710036cbf4512acbae7cf940e1743a1379 100644
--- a/src/plugins/cpptools/cppcompletionassist.cpp
+++ b/src/plugins/cpptools/cppcompletionassist.cpp
@@ -941,118 +941,35 @@ IAssistProposal *InternalCppCompletionAssistProcessor::createHintProposal(
     return proposal;
 }
 
-int InternalCppCompletionAssistProcessor::startOfOperator(int pos,
+int InternalCppCompletionAssistProcessor::startOfOperator(int positionInDocument,
                                                           unsigned *kind,
                                                           bool wantFunctionCall) const
 {
-    const QChar ch  = pos > -1 ? m_interface->characterAt(pos - 1) : QChar();
-    const QChar ch2 = pos >  0 ? m_interface->characterAt(pos - 2) : QChar();
-    const QChar ch3 = pos >  1 ? m_interface->characterAt(pos - 3) : QChar();
-
-    int start = pos - CppCompletionAssistProvider::activationSequenceChar(ch, ch2, ch3, kind,
-        wantFunctionCall, /*wantQt5SignalSlots*/ true);
-    if (start != pos) {
-        QTextCursor tc(m_interface->textDocument());
-        tc.setPosition(pos);
-
-        // Include completion: make sure the quote character is the first one on the line
-        if (*kind == T_STRING_LITERAL) {
-            QTextCursor s = tc;
-            s.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor);
-            QString sel = s.selectedText();
-            if (sel.indexOf(QLatin1Char('"')) < sel.length() - 1) {
-                *kind = T_EOF_SYMBOL;
-                start = pos;
-            }
-        }
-
-        if (*kind == T_COMMA) {
-            ExpressionUnderCursor expressionUnderCursor(m_interface->languageFeatures());
-            if (expressionUnderCursor.startOfFunctionCall(tc) == -1) {
-                *kind = T_EOF_SYMBOL;
-                start = pos;
-            }
-        }
-
-        SimpleLexer tokenize;
-        tokenize.setLanguageFeatures(m_interface->languageFeatures());
-        tokenize.setSkipComments(false);
-        const Tokens &tokens = tokenize(tc.block().text(), BackwardsScanner::previousBlockState(tc.block()));
-        const int tokenIdx = SimpleLexer::tokenBefore(tokens, qMax(0, tc.positionInBlock() - 1)); // get the token at the left of the cursor
-        const Token tk = (tokenIdx == -1) ? Token() : tokens.at(tokenIdx);
-
-        if (*kind == T_AMPER && tokenIdx > 0) {
-            const Token &previousToken = tokens.at(tokenIdx - 1);
-            if (previousToken.kind() == T_COMMA)
-                start = pos - (tk.utf16charOffset - previousToken.utf16charOffset) - 1;
-        } else if (*kind == T_DOXY_COMMENT && !(tk.is(T_DOXY_COMMENT) || tk.is(T_CPP_DOXY_COMMENT))) {
-            *kind = T_EOF_SYMBOL;
-            start = pos;
-        }
-        // Don't complete in comments or strings, but still check for include completion
-        else if (tk.is(T_COMMENT) || tk.is(T_CPP_COMMENT)
-                 || tk.is(T_CPP_DOXY_COMMENT) || tk.is(T_DOXY_COMMENT)
-                 || (tk.isLiteral() && (*kind != T_STRING_LITERAL
-                                     && *kind != T_ANGLE_STRING_LITERAL
-                                     && *kind != T_SLASH
-                                     && *kind != T_DOT))) {
-            *kind = T_EOF_SYMBOL;
-            start = pos;
-        // Include completion: can be triggered by slash, but only in a string
-        } else if (*kind == T_SLASH && (tk.isNot(T_STRING_LITERAL) && tk.isNot(T_ANGLE_STRING_LITERAL))) {
-            *kind = T_EOF_SYMBOL;
-            start = pos;
-        } else if (*kind == T_LPAREN) {
-            if (tokenIdx > 0) {
-                const Token &previousToken = tokens.at(tokenIdx - 1); // look at the token at the left of T_LPAREN
-                switch (previousToken.kind()) {
-                case T_IDENTIFIER:
-                case T_GREATER:
-                case T_SIGNAL:
-                case T_SLOT:
-                    break; // good
-
-                default:
-                    // that's a bad token :)
-                    *kind = T_EOF_SYMBOL;
-                    start = pos;
-                }
-            }
-        }
-        // Check for include preprocessor directive
-        else if (*kind == T_STRING_LITERAL || *kind == T_ANGLE_STRING_LITERAL|| *kind == T_SLASH
-                 || (*kind == T_DOT && (tk.is(T_STRING_LITERAL) || tk.is(T_ANGLE_STRING_LITERAL)))) {
-            bool include = false;
-            if (tokens.size() >= 3) {
-                if (tokens.at(0).is(T_POUND) && tokens.at(1).is(T_IDENTIFIER) && (tokens.at(2).is(T_STRING_LITERAL) ||
-                                                                                  tokens.at(2).is(T_ANGLE_STRING_LITERAL))) {
-                    const Token &directiveToken = tokens.at(1);
-                    QString directive = tc.block().text().mid(directiveToken.utf16charsBegin(),
-                                                              directiveToken.utf16chars());
-                    if (directive == QLatin1String("include") ||
-                            directive == QLatin1String("include_next") ||
-                            directive == QLatin1String("import")) {
-                        include = true;
-                    }
-                }
-            }
-
-            if (!include) {
-                *kind = T_EOF_SYMBOL;
-                start = pos;
-            } else {
-                if (*kind == T_DOT) {
-                    start = findStartOfName(start);
-                    const QChar ch4  = start > -1 ? m_interface->characterAt(start - 1) : QChar();
-                    const QChar ch5 = start >  0 ? m_interface->characterAt(start - 2) : QChar();
-                    const QChar ch6 = start >  1 ? m_interface->characterAt(start - 3) : QChar();
-                    start = start - CppCompletionAssistProvider::activationSequenceChar(
-                                        ch4, ch5, ch6, kind, wantFunctionCall, false);
-                }
-            }
-        }
-    }
-
+    const QChar ch  = m_interface->characterAt(positionInDocument - 1);
+    const QChar ch2 = m_interface->characterAt(positionInDocument - 2);
+    const QChar ch3 = m_interface->characterAt(positionInDocument - 3);
+
+    int start = positionInDocument
+                 - CppCompletionAssistProvider::activationSequenceChar(ch, ch2, ch3, kind,
+                                                                       wantFunctionCall,
+                                                                       /*wantQt5SignalSlots*/ true);
+
+    const auto dotAtIncludeCompletionHandler = [this](int &start, unsigned *kind) {
+            start = findStartOfName(start);
+            const QChar ch4 = m_interface->characterAt(start - 1);
+            const QChar ch5 = m_interface->characterAt(start - 2);
+            const QChar ch6 = m_interface->characterAt(start - 3);
+            start = start - CppCompletionAssistProvider::activationSequenceChar(
+                                ch4, ch5, ch6, kind, false, false);
+    };
+
+    CppCompletionAssistProcessor::startOfOperator(m_interface->textDocument(),
+                                                  positionInDocument,
+                                                  kind,
+                                                  start,
+                                                  m_interface->languageFeatures(),
+                                                  /*adjustForQt5SignalSlotCompletion=*/ true,
+                                                  dotAtIncludeCompletionHandler);
     return start;
 }
 
diff --git a/src/plugins/cpptools/cppcompletionassist.h b/src/plugins/cpptools/cppcompletionassist.h
index 14a9e9190cbfcc23c1e4d9a64284ec026bf8b880..809a5a1005cba869d7967da2766e072951cc67fd 100644
--- a/src/plugins/cpptools/cppcompletionassist.h
+++ b/src/plugins/cpptools/cppcompletionassist.h
@@ -105,7 +105,7 @@ private:
     TextEditor::IAssistProposal *createHintProposal(QList<CPlusPlus::Function *> symbols) const;
     bool accepts() const;
 
-    int startOfOperator(int pos, unsigned *kind, bool wantFunctionCall) const;
+    int startOfOperator(int positionInDocument, unsigned *kind, bool wantFunctionCall) const;
     int findStartOfName(int pos = -1) const;
     int startCompletionHelper();
     bool tryObjCCompletion();
diff --git a/src/plugins/cpptools/cppcompletionassistprocessor.cpp b/src/plugins/cpptools/cppcompletionassistprocessor.cpp
index bcc7e9507df906efd6d3945611cef2cdb0b6b175..5dd52285388e12ebfd27748296678e561f2e1748 100644
--- a/src/plugins/cpptools/cppcompletionassistprocessor.cpp
+++ b/src/plugins/cpptools/cppcompletionassistprocessor.cpp
@@ -27,6 +27,17 @@
 
 #include <cppeditor/cppeditorconstants.h>
 
+#include <cplusplus/BackwardsScanner.h>
+#include <cplusplus/ExpressionUnderCursor.h>
+#include <cplusplus/SimpleLexer.h>
+#include <cplusplus/Token.h>
+
+#include <QTextBlock>
+#include <QTextCursor>
+#include <QTextDocument>
+
+using namespace CPlusPlus;
+
 namespace CppTools {
 
 CppCompletionAssistProcessor::CppCompletionAssistProcessor()
@@ -70,4 +81,118 @@ void CppCompletionAssistProcessor::addSnippets()
     m_completions.append(m_snippetCollector.collect());
 }
 
+static bool isDoxygenTagCompletionCharacter(const QChar &character)
+{
+    return character == QLatin1Char('\\')
+        || character == QLatin1Char('@') ;
+}
+
+void CppCompletionAssistProcessor::startOfOperator(QTextDocument *textDocument,
+        int positionInDocument,
+        unsigned *kind,
+        int &start,
+        const CPlusPlus::LanguageFeatures &languageFeatures,
+        bool adjustForQt5SignalSlotCompletion,
+        DotAtIncludeCompletionHandler dotAtIncludeCompletionHandler)
+{
+    if (start != positionInDocument) {
+        QTextCursor tc(textDocument);
+        tc.setPosition(positionInDocument);
+
+        // Include completion: make sure the quote character is the first one on the line
+        if (*kind == T_STRING_LITERAL) {
+            QTextCursor s = tc;
+            s.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor);
+            QString sel = s.selectedText();
+            if (sel.indexOf(QLatin1Char('"')) < sel.length() - 1) {
+                *kind = T_EOF_SYMBOL;
+                start = positionInDocument;
+            }
+        }
+
+        if (*kind == T_COMMA) {
+            ExpressionUnderCursor expressionUnderCursor(languageFeatures);
+            if (expressionUnderCursor.startOfFunctionCall(tc) == -1) {
+                *kind = T_EOF_SYMBOL;
+                start = positionInDocument;
+            }
+        }
+
+        SimpleLexer tokenize;
+        tokenize.setLanguageFeatures(languageFeatures);
+        tokenize.setSkipComments(false);
+        const Tokens &tokens = tokenize(tc.block().text(), BackwardsScanner::previousBlockState(tc.block()));
+        const int tokenIdx = SimpleLexer::tokenBefore(tokens, qMax(0, tc.positionInBlock() - 1)); // get the token at the left of the cursor
+        const Token tk = (tokenIdx == -1) ? Token() : tokens.at(tokenIdx);
+        const QChar characterBeforePositionInDocument
+                = textDocument->characterAt(positionInDocument - 1);
+
+        if (adjustForQt5SignalSlotCompletion && *kind == T_AMPER && tokenIdx > 0) {
+            const Token &previousToken = tokens.at(tokenIdx - 1);
+            if (previousToken.kind() == T_COMMA)
+                start = positionInDocument - (tk.utf16charOffset - previousToken.utf16charOffset) - 1;
+        } else if (*kind == T_DOXY_COMMENT && !(tk.is(T_DOXY_COMMENT) || tk.is(T_CPP_DOXY_COMMENT))) {
+            *kind = T_EOF_SYMBOL;
+            start = positionInDocument;
+        // Do not complete in comments, except in doxygen comments for doxygen commands.
+        // Do not complete in strings, except it is for include completion.
+        } else if (tk.is(T_COMMENT) || tk.is(T_CPP_COMMENT)
+                 || ((tk.is(T_CPP_DOXY_COMMENT) || tk.is(T_DOXY_COMMENT))
+                        && !isDoxygenTagCompletionCharacter(characterBeforePositionInDocument))
+                 || (tk.isLiteral() && (*kind != T_STRING_LITERAL
+                                     && *kind != T_ANGLE_STRING_LITERAL
+                                     && *kind != T_SLASH
+                                     && *kind != T_DOT))) {
+            *kind = T_EOF_SYMBOL;
+            start = positionInDocument;
+        // Include completion: can be triggered by slash, but only in a string
+        } else if (*kind == T_SLASH && (tk.isNot(T_STRING_LITERAL) && tk.isNot(T_ANGLE_STRING_LITERAL))) {
+            *kind = T_EOF_SYMBOL;
+            start = positionInDocument;
+        } else if (*kind == T_LPAREN) {
+            if (tokenIdx > 0) {
+                const Token &previousToken = tokens.at(tokenIdx - 1); // look at the token at the left of T_LPAREN
+                switch (previousToken.kind()) {
+                case T_IDENTIFIER:
+                case T_GREATER:
+                case T_SIGNAL:
+                case T_SLOT:
+                    break; // good
+
+                default:
+                    // that's a bad token :)
+                    *kind = T_EOF_SYMBOL;
+                    start = positionInDocument;
+                }
+            }
+        }
+        // Check for include preprocessor directive
+        else if (*kind == T_STRING_LITERAL || *kind == T_ANGLE_STRING_LITERAL || *kind == T_SLASH
+                 || (*kind == T_DOT
+                        && (tk.is(T_STRING_LITERAL) || tk.is(T_ANGLE_STRING_LITERAL)))) {
+            bool include = false;
+            if (tokens.size() >= 3) {
+                if (tokens.at(0).is(T_POUND) && tokens.at(1).is(T_IDENTIFIER) && (tokens.at(2).is(T_STRING_LITERAL) ||
+                                                                                  tokens.at(2).is(T_ANGLE_STRING_LITERAL))) {
+                    const Token &directiveToken = tokens.at(1);
+                    QString directive = tc.block().text().mid(directiveToken.utf16charsBegin(),
+                                                              directiveToken.utf16chars());
+                    if (directive == QLatin1String("include") ||
+                            directive == QLatin1String("include_next") ||
+                            directive == QLatin1String("import")) {
+                        include = true;
+                    }
+                }
+            }
+
+            if (!include) {
+                *kind = T_EOF_SYMBOL;
+                start = positionInDocument;
+            } else if (*kind == T_DOT && dotAtIncludeCompletionHandler){
+                dotAtIncludeCompletionHandler(start, kind);
+            }
+        }
+    }
+}
+
 } // namespace CppTools
diff --git a/src/plugins/cpptools/cppcompletionassistprocessor.h b/src/plugins/cpptools/cppcompletionassistprocessor.h
index 49634539ce7f4820a0204ebe0701a7678b13f2c3..6db68e1a1a9d7ca9fb23d44d7fca0076dd14657f 100644
--- a/src/plugins/cpptools/cppcompletionassistprocessor.h
+++ b/src/plugins/cpptools/cppcompletionassistprocessor.h
@@ -32,6 +32,16 @@
 
 #include <cplusplus/Icons.h>
 
+#include <functional>
+
+QT_BEGIN_NAMESPACE
+class QTextDocument;
+QT_END_NAMESPACE
+
+namespace CPlusPlus {
+struct LanguageFeatures;
+}
+
 namespace CppTools {
 
 class CPPTOOLS_EXPORT CppCompletionAssistProcessor : public TextEditor::IAssistProcessor
@@ -42,6 +52,16 @@ public:
 protected:
     void addSnippets();
 
+    using DotAtIncludeCompletionHandler = std::function<void(int &startPosition, unsigned *kind)>;
+    static void startOfOperator(QTextDocument *textDocument,
+                                int positionInDocument,
+                                unsigned *kind,
+                                int &start,
+                                const CPlusPlus::LanguageFeatures &languageFeatures,
+                                bool adjustForQt5SignalSlotCompletion = false,
+                                DotAtIncludeCompletionHandler dotAtIncludeCompletionHandler
+                                    = DotAtIncludeCompletionHandler());
+
     int m_positionForProposal;
     QList<TextEditor::AssistProposalItemInterface *> m_completions;
     QStringList m_preprocessorCompletions;
diff --git a/src/plugins/cpptools/cppdoxygen.cpp b/src/plugins/cpptools/cppdoxygen.cpp
index 64a92c4c553af4240d5ff69e4826e0a170c0a645..363e68401073971fb0c5da34d942ee56b935724e 100644
--- a/src/plugins/cpptools/cppdoxygen.cpp
+++ b/src/plugins/cpptools/cppdoxygen.cpp
@@ -23,6 +23,24 @@
 **
 ****************************************************************************/
 
+//
+//  W A R N I N G
+//  -------------
+//
+// Main parts of this file are generated by "cplusplus-keywordgen".
+// Use the tool to update new keywords/identifiers:
+//
+//  1. Update the input file cppdoxygen.kwgen with new keywords/identifiers.
+//  2. Run the tool with the input file:
+//       $ INPUT_FILE=${QTC_SOURCE}/src/plugins/cpptools/cppdoxygen.kwgen
+//       $ OUTPUT_FILE=/tmp/new.cpp
+//       $ TOOL=${QTC_BUILD}/bin/cplusplus-keywordgen
+//       $ cat $INPUT_FILE | $TOOL > $OUTPUT_FILE
+//  3. Copy over the classify* functions from $OUTPUT_FILE to this file,
+//     update the doxy_token_spell array in this file and the enums in the
+//     header.
+//
+
 #include "cppdoxygen.h"
 
 #include <QString>
@@ -43,270 +61,353 @@ using namespace CppTools;
 
 static const char *doxy_token_spell[] = {
     "identifier",
-    "arg",
-    "attention",
-    "author",
-    "callgraph",
-    "code",
-    "dot",
-    "else",
-    "endcode",
-    "endcond",
-    "enddot",
-    "endhtmlonly",
-    "endif",
-    "endlatexonly",
-    "endlink",
-    "endmanonly",
-    "endverbatim",
-    "endxmlonly",
-    "hideinitializer",
-    "htmlonly",
-    "interface",
-    "internal",
-    "invariant",
-    "latexonly",
-    "li",
-    "manonly",
-    "n",
-    "nosubgrouping",
-    "note",
-    "only",
-    "post",
-    "pre",
-    "remarks",
-    "return",
-    "returns",
-    "sa",
-    "see",
-    "showinitializer",
-    "since",
-    "test",
-    "todo",
-    "verbatim",
-    "warning",
-    "xmlonly",
+
     "a",
+    "abstract",
+    "addindex",
     "addtogroup",
     "anchor",
+    "annotatedlist",
+    "arg",
+    "attention",
+    "author",
+    "authors",
     "b",
+    "badcode",
+    "basename",
+    "bold",
+    "brief",
+    "bug",
     "c",
+    "callergraph",
+    "callgraph",
+    "caption",
+    "category",
+    "chapter",
+    "cite",
     "class",
+    "code",
+    "codeline",
+    "compat",
     "cond",
+    "contentspage",
+    "copybrief",
+    "copydetails",
     "copydoc",
+    "copyright",
+    "corelib",
+    "date",
     "def",
+    "default",
+    "defgroup",
+    "deprecated",
+    "details",
+    "diafile",
+    "dir",
+    "div",
+    "docbookonly",
     "dontinclude",
+    "dot",
     "dotfile",
+    "dots",
     "e",
+    "else",
     "elseif",
     "em",
-    "enum",
-    "example",
-    "exception",
-    "exceptions",
-    "file",
-    "htmlinclude",
-    "if",
-    "ifnot",
-    "include",
-    "link",
-    "namespace",
-    "p",
-    "package",
-    "ref",
-    "relates",
-    "relatesalso",
-    "retval",
-    "throw",
-    "throws",
-    "verbinclude",
-    "version",
-    "xrefitem",
-    "param",
-    "image",
-    "defgroup",
-    "page",
-    "paragraph",
-    "section",
-    "struct",
-    "subsection",
-    "subsubsection",
-    "union",
-    "weakgroup",
-    "addindex",
-    "brief",
-    "bug",
-    "date",
-    "deprecated",
-    "fn",
-    "ingroup",
-    "line",
-    "mainpage",
-    "name",
-    "overload",
-    "par",
-    "short",
-    "skip",
-    "skipline",
-    "typedef",
-    "until",
-    "var",
-    "abstract",
-    "badcode",
-    "basename",
-    "bold",
-    "caption",
-    "chapter",
-    "codeline",
-    "dots",
     "endabstract",
     "endchapter",
+    "endcode",
+    "endcond",
+    "enddocbookonly",
+    "enddot",
     "endfootnote",
+    "endhtmlonly",
+    "endif",
+    "endinternal",
+    "endlatexonly",
     "endlegalese",
+    "endlink",
     "endlist",
+    "endmanonly",
+    "endmsc",
     "endomit",
+    "endparblock",
     "endpart",
     "endquotation",
     "endraw",
+    "endrtfonly",
+    "endsecreflist",
     "endsection1",
     "endsection2",
     "endsection3",
     "endsection4",
     "endsidebar",
     "endtable",
+    "enduml",
+    "endverbatim",
+    "endxmlonly",
+    "enum",
+    "example",
+    "exception",
+    "exceptions",
     "expire",
+    "extends",
+    "externalpage",
+    "file",
+    "fn",
     "footnote",
     "generatelist",
     "granularity",
+    "group",
+    "gui",
     "header",
+    "headerfile",
+    "hidecallergraph",
+    "hidecallgraph",
+    "hideinitializer",
+    "htmlinclude",
+    "htmlonly",
     "i",
+    "idlexcept",
+    "if",
+    "ifnot",
+    "image",
+    "implements",
+    "include",
+    "includelineno",
     "index",
+    "indexpage",
+    "ingroup",
+    "inheaderfile",
+    "inherits",
     "inlineimage",
+    "inmodule",
+    "inpublicgroup",
+    "inqmlmodule",
+    "instantiates",
+    "interface",
+    "internal",
+    "invariant",
     "keyword",
     "l",
+    "latexinclude",
+    "latexonly",
     "legalese",
+    "li",
+    "line",
+    "link",
     "list",
+    "macro",
+    "mainclass",
+    "mainpage",
+    "manonly",
+    "memberof",
     "meta",
+    "module",
+    "msc",
+    "mscfile",
+    "n",
+    "name",
+    "namespace",
+    "network",
     "newcode",
+    "nextpage",
+    "noautolist",
+    "nonreentrant",
+    "nosubgrouping",
+    "note",
     "o",
+    "obsolete",
     "oldcode",
     "omit",
     "omitvalue",
+    "only",
+    "opengl",
+    "overload",
+    "p",
+    "package",
+    "page",
+    "par",
+    "paragraph",
+    "param",
+    "parblock",
     "part",
+    "post",
+    "pre",
+    "preliminary",
+    "previouspage",
     "printline",
     "printto",
     "printuntil",
+    "private",
+    "privatesection",
+    "property",
+    "protected",
+    "protectedsection",
+    "protocol",
+    "public",
+    "publicsection",
+    "pure",
+    "qmlabstract",
+    "qmlattachedproperty",
+    "qmlattachedsignal",
+    "qmlbasictype",
+    "qmlclass",
+    "qmlmethod",
+    "qmlmodule",
+    "qmlproperty",
+    "qmlsignal",
+    "qmltype",
+    "qt3support",
+    "qtestlib",
     "quotation",
     "quotefile",
     "quotefromfile",
     "quotefunction",
     "raw",
+    "reentrant",
+    "ref",
+    "refitem",
+    "reimp",
+    "related",
+    "relatedalso",
+    "relates",
+    "relatesalso",
+    "remark",
+    "remarks",
+    "result",
+    "return",
+    "returns",
+    "retval",
     "row",
+    "rtfonly",
+    "sa",
+    "secreflist",
+    "section",
     "section1",
     "section2",
     "section3",
     "section4",
+    "see",
+    "service",
+    "short",
+    "showinitializer",
     "sidebar",
+    "since",
+    "skip",
+    "skipline",
     "skipto",
     "skipuntil",
     "snippet",
+    "span",
+    "sql",
+    "startpage",
+    "startuml",
+    "struct",
     "sub",
+    "subpage",
+    "subsection",
+    "subsubsection",
+    "subtitle",
     "sup",
+    "svg",
     "table",
     "tableofcontents",
     "target",
+    "test",
+    "threadsafe",
+    "throw",
+    "throws",
+    "title",
+    "todo",
+    "tparam",
     "tt",
+    "typedef",
+    "uicontrol",
+    "uitools",
     "underline",
     "unicode",
+    "union",
+    "until",
     "value",
-    "contentspage",
-    "externalpage",
-    "group",
-    "headerfile",
-    "indexpage",
-    "inheaderfile",
-    "macro",
-    "module",
-    "nextpage",
-    "previouspage",
-    "property",
-    "reimp",
-    "service",
-    "startpage",
+    "var",
     "variable",
-    "compat",
-    "inmodule",
-    "mainclass",
-    "nonreentrant",
-    "obsolete",
-    "preliminary",
-    "inpublicgroup",
-    "reentrant",
-    "subtitle",
-    "threadsafe",
-    "title",
-    "corelib",
-    "uitools",
-    "gui",
-    "network",
-    "opengl",
-    "qt3support",
-    "svg",
-    "sql",
-    "qtestlib",
+    "verbatim",
+    "verbinclude",
+    "version",
+    "vhdlflow",
+    "warning",
+    "weakgroup",
     "webkit",
-    "xml"
+    "xml",
+    "xmlonly",
+    "xrefitem",
 };
 
 const char *CppTools::doxygenTagSpell(int index)
 { return doxy_token_spell[index]; }
 
 static inline int classify1(const QChar *s) {
-  if (s[0].unicode() == 'a')
+  if (s[0].unicode() == 'a') {
     return T_DOXY_A;
-  else if (s[0].unicode() == 'b')
+  }
+  else if (s[0].unicode() == 'b') {
     return T_DOXY_B;
-  else if (s[0].unicode() == 'c')
+  }
+  else if (s[0].unicode() == 'c') {
     return T_DOXY_C;
-  else if (s[0].unicode() == 'e')
+  }
+  else if (s[0].unicode() == 'e') {
     return T_DOXY_E;
-  else if (s[0].unicode() == 'i')
+  }
+  else if (s[0].unicode() == 'i') {
     return T_DOXY_I;
-  else if (s[0].unicode() == 'l')
+  }
+  else if (s[0].unicode() == 'l') {
     return T_DOXY_L;
-  else if (s[0].unicode() == 'n')
+  }
+  else if (s[0].unicode() == 'n') {
     return T_DOXY_N;
-  else if (s[0].unicode() == 'o')
+  }
+  else if (s[0].unicode() == 'o') {
     return T_DOXY_O;
-  else if (s[0].unicode() == 'p')
+  }
+  else if (s[0].unicode() == 'p') {
     return T_DOXY_P;
+  }
   return T_DOXY_IDENTIFIER;
 }
 
 static inline int classify2(const QChar *s) {
   if (s[0].unicode() == 'e') {
-    if (s[1].unicode() == 'm')
+    if (s[1].unicode() == 'm') {
       return T_DOXY_EM;
+    }
   }
   else if (s[0].unicode() == 'f') {
-    if (s[1].unicode() == 'n')
+    if (s[1].unicode() == 'n') {
       return T_DOXY_FN;
+    }
   }
   else if (s[0].unicode() == 'i') {
-    if (s[1].unicode() == 'f')
+    if (s[1].unicode() == 'f') {
       return T_DOXY_IF;
+    }
   }
   else if (s[0].unicode() == 'l') {
-    if (s[1].unicode() == 'i')
+    if (s[1].unicode() == 'i') {
       return T_DOXY_LI;
+    }
   }
   else if (s[0].unicode() == 's') {
-    if (s[1].unicode() == 'a')
+    if (s[1].unicode() == 'a') {
       return T_DOXY_SA;
+    }
   }
   else if (s[0].unicode() == 't') {
-    if (s[1].unicode() == 't')
+    if (s[1].unicode() == 't') {
       return T_DOXY_TT;
+    }
   }
   return T_DOXY_IDENTIFIER;
 }
@@ -314,86 +415,118 @@ static inline int classify2(const QChar *s) {
 static inline int classify3(const QChar *s) {
   if (s[0].unicode() == 'a') {
     if (s[1].unicode() == 'r') {
-      if (s[2].unicode() == 'g')
+      if (s[2].unicode() == 'g') {
         return T_DOXY_ARG;
+      }
     }
   }
   else if (s[0].unicode() == 'b') {
     if (s[1].unicode() == 'u') {
-      if (s[2].unicode() == 'g')
+      if (s[2].unicode() == 'g') {
         return T_DOXY_BUG;
+      }
     }
   }
   else if (s[0].unicode() == 'd') {
     if (s[1].unicode() == 'e') {
-      if (s[2].unicode() == 'f')
+      if (s[2].unicode() == 'f') {
         return T_DOXY_DEF;
+      }
+    }
+    else if (s[1].unicode() == 'i') {
+      if (s[2].unicode() == 'r') {
+        return T_DOXY_DIR;
+      }
+      else if (s[2].unicode() == 'v') {
+        return T_DOXY_DIV;
+      }
     }
     else if (s[1].unicode() == 'o') {
-      if (s[2].unicode() == 't')
+      if (s[2].unicode() == 't') {
         return T_DOXY_DOT;
+      }
     }
   }
   else if (s[0].unicode() == 'g') {
     if (s[1].unicode() == 'u') {
-      if (s[2].unicode() == 'i')
+      if (s[2].unicode() == 'i') {
         return T_DOXY_GUI;
+      }
+    }
+  }
+  else if (s[0].unicode() == 'm') {
+    if (s[1].unicode() == 's') {
+      if (s[2].unicode() == 'c') {
+        return T_DOXY_MSC;
+      }
     }
   }
   else if (s[0].unicode() == 'p') {
     if (s[1].unicode() == 'a') {
-      if (s[2].unicode() == 'r')
+      if (s[2].unicode() == 'r') {
         return T_DOXY_PAR;
+      }
     }
     else if (s[1].unicode() == 'r') {
-      if (s[2].unicode() == 'e')
+      if (s[2].unicode() == 'e') {
         return T_DOXY_PRE;
+      }
     }
   }
   else if (s[0].unicode() == 'r') {
     if (s[1].unicode() == 'a') {
-      if (s[2].unicode() == 'w')
+      if (s[2].unicode() == 'w') {
         return T_DOXY_RAW;
+      }
     }
     else if (s[1].unicode() == 'e') {
-      if (s[2].unicode() == 'f')
+      if (s[2].unicode() == 'f') {
         return T_DOXY_REF;
+      }
     }
     else if (s[1].unicode() == 'o') {
-      if (s[2].unicode() == 'w')
+      if (s[2].unicode() == 'w') {
         return T_DOXY_ROW;
+      }
     }
   }
   else if (s[0].unicode() == 's') {
     if (s[1].unicode() == 'e') {
-      if (s[2].unicode() == 'e')
+      if (s[2].unicode() == 'e') {
         return T_DOXY_SEE;
+      }
     }
     else if (s[1].unicode() == 'q') {
-      if (s[2].unicode() == 'l')
+      if (s[2].unicode() == 'l') {
         return T_DOXY_SQL;
+      }
     }
     else if (s[1].unicode() == 'u') {
-      if (s[2].unicode() == 'b')
+      if (s[2].unicode() == 'b') {
         return T_DOXY_SUB;
-      else if (s[2].unicode() == 'p')
+      }
+      else if (s[2].unicode() == 'p') {
         return T_DOXY_SUP;
+      }
     }
     else if (s[1].unicode() == 'v') {
-      if (s[2].unicode() == 'g')
+      if (s[2].unicode() == 'g') {
         return T_DOXY_SVG;
+      }
     }
   }
   else if (s[0].unicode() == 'v') {
     if (s[1].unicode() == 'a') {
-      if (s[2].unicode() == 'r')
+      if (s[2].unicode() == 'r') {
         return T_DOXY_VAR;
+      }
     }
   }
   else if (s[0].unicode() == 'x') {
     if (s[1].unicode() == 'm') {
-      if (s[2].unicode() == 'l')
+      if (s[2].unicode() == 'l') {
         return T_DOXY_XML;
+      }
     }
   }
   return T_DOXY_IDENTIFIER;
@@ -403,146 +536,189 @@ static inline int classify4(const QChar *s) {
   if (s[0].unicode() == 'b') {
     if (s[1].unicode() == 'o') {
       if (s[2].unicode() == 'l') {
-        if (s[3].unicode() == 'd')
+        if (s[3].unicode() == 'd') {
           return T_DOXY_BOLD;
+        }
       }
     }
   }
   else if (s[0].unicode() == 'c') {
-    if (s[1].unicode() == 'o') {
+    if (s[1].unicode() == 'i') {
+      if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'e') {
+          return T_DOXY_CITE;
+        }
+      }
+    }
+    else if (s[1].unicode() == 'o') {
       if (s[2].unicode() == 'd') {
-        if (s[3].unicode() == 'e')
+        if (s[3].unicode() == 'e') {
           return T_DOXY_CODE;
+        }
       }
       else if (s[2].unicode() == 'n') {
-        if (s[3].unicode() == 'd')
+        if (s[3].unicode() == 'd') {
           return T_DOXY_COND;
+        }
       }
     }
   }
   else if (s[0].unicode() == 'd') {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 't') {
-        if (s[3].unicode() == 'e')
+        if (s[3].unicode() == 'e') {
           return T_DOXY_DATE;
+        }
       }
     }
     else if (s[1].unicode() == 'o') {
       if (s[2].unicode() == 't') {
-        if (s[3].unicode() == 's')
+        if (s[3].unicode() == 's') {
           return T_DOXY_DOTS;
+        }
       }
     }
   }
   else if (s[0].unicode() == 'e') {
     if (s[1].unicode() == 'l') {
       if (s[2].unicode() == 's') {
-        if (s[3].unicode() == 'e')
+        if (s[3].unicode() == 'e') {
           return T_DOXY_ELSE;
+        }
       }
     }
     else if (s[1].unicode() == 'n') {
       if (s[2].unicode() == 'u') {
-        if (s[3].unicode() == 'm')
+        if (s[3].unicode() == 'm') {
           return T_DOXY_ENUM;
+        }
       }
     }
   }
   else if (s[0].unicode() == 'f') {
     if (s[1].unicode() == 'i') {
       if (s[2].unicode() == 'l') {
-        if (s[3].unicode() == 'e')
+        if (s[3].unicode() == 'e') {
           return T_DOXY_FILE;
+        }
       }
     }
   }
   else if (s[0].unicode() == 'l') {
     if (s[1].unicode() == 'i') {
       if (s[2].unicode() == 'n') {
-        if (s[3].unicode() == 'e')
+        if (s[3].unicode() == 'e') {
           return T_DOXY_LINE;
-        else if (s[3].unicode() == 'k')
+        }
+        else if (s[3].unicode() == 'k') {
           return T_DOXY_LINK;
+        }
       }
       else if (s[2].unicode() == 's') {
-        if (s[3].unicode() == 't')
+        if (s[3].unicode() == 't') {
           return T_DOXY_LIST;
+        }
       }
     }
   }
   else if (s[0].unicode() == 'm') {
     if (s[1].unicode() == 'e') {
       if (s[2].unicode() == 't') {
-        if (s[3].unicode() == 'a')
+        if (s[3].unicode() == 'a') {
           return T_DOXY_META;
+        }
       }
     }
   }
   else if (s[0].unicode() == 'n') {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'm') {
-        if (s[3].unicode() == 'e')
+        if (s[3].unicode() == 'e') {
           return T_DOXY_NAME;
+        }
       }
     }
     else if (s[1].unicode() == 'o') {
       if (s[2].unicode() == 't') {
-        if (s[3].unicode() == 'e')
+        if (s[3].unicode() == 'e') {
           return T_DOXY_NOTE;
+        }
       }
     }
   }
   else if (s[0].unicode() == 'o') {
     if (s[1].unicode() == 'm') {
       if (s[2].unicode() == 'i') {
-        if (s[3].unicode() == 't')
+        if (s[3].unicode() == 't') {
           return T_DOXY_OMIT;
+        }
       }
     }
     else if (s[1].unicode() == 'n') {
       if (s[2].unicode() == 'l') {
-        if (s[3].unicode() == 'y')
+        if (s[3].unicode() == 'y') {
           return T_DOXY_ONLY;
+        }
       }
     }
   }
   else if (s[0].unicode() == 'p') {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'g') {
-        if (s[3].unicode() == 'e')
+        if (s[3].unicode() == 'e') {
           return T_DOXY_PAGE;
+        }
       }
       else if (s[2].unicode() == 'r') {
-        if (s[3].unicode() == 't')
+        if (s[3].unicode() == 't') {
           return T_DOXY_PART;
+        }
       }
     }
     else if (s[1].unicode() == 'o') {
       if (s[2].unicode() == 's') {
-        if (s[3].unicode() == 't')
+        if (s[3].unicode() == 't') {
           return T_DOXY_POST;
+        }
+      }
+    }
+    else if (s[1].unicode() == 'u') {
+      if (s[2].unicode() == 'r') {
+        if (s[3].unicode() == 'e') {
+          return T_DOXY_PURE;
+        }
       }
     }
   }
   else if (s[0].unicode() == 's') {
     if (s[1].unicode() == 'k') {
       if (s[2].unicode() == 'i') {
-        if (s[3].unicode() == 'p')
+        if (s[3].unicode() == 'p') {
           return T_DOXY_SKIP;
+        }
+      }
+    }
+    else if (s[1].unicode() == 'p') {
+      if (s[2].unicode() == 'a') {
+        if (s[3].unicode() == 'n') {
+          return T_DOXY_SPAN;
+        }
       }
     }
   }
   else if (s[0].unicode() == 't') {
     if (s[1].unicode() == 'e') {
       if (s[2].unicode() == 's') {
-        if (s[3].unicode() == 't')
+        if (s[3].unicode() == 't') {
           return T_DOXY_TEST;
+        }
       }
     }
     else if (s[1].unicode() == 'o') {
       if (s[2].unicode() == 'd') {
-        if (s[3].unicode() == 'o')
+        if (s[3].unicode() == 'o') {
           return T_DOXY_TODO;
+        }
       }
     }
   }
@@ -554,8 +730,9 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'r') {
       if (s[2].unicode() == 'i') {
         if (s[3].unicode() == 'e') {
-          if (s[4].unicode() == 'f')
+          if (s[4].unicode() == 'f') {
             return T_DOXY_BRIEF;
+          }
         }
       }
     }
@@ -564,8 +741,9 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'l') {
       if (s[2].unicode() == 'a') {
         if (s[3].unicode() == 's') {
-          if (s[4].unicode() == 's')
+          if (s[4].unicode() == 's') {
             return T_DOXY_CLASS;
+          }
         }
       }
     }
@@ -574,8 +752,9 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'n') {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'i') {
-          if (s[4].unicode() == 'f')
+          if (s[4].unicode() == 'f') {
             return T_DOXY_ENDIF;
+          }
         }
       }
     }
@@ -584,8 +763,9 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'r') {
       if (s[2].unicode() == 'o') {
         if (s[3].unicode() == 'u') {
-          if (s[4].unicode() == 'p')
+          if (s[4].unicode() == 'p') {
             return T_DOXY_GROUP;
+          }
         }
       }
     }
@@ -594,24 +774,27 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'f') {
       if (s[2].unicode() == 'n') {
         if (s[3].unicode() == 'o') {
-          if (s[4].unicode() == 't')
+          if (s[4].unicode() == 't') {
             return T_DOXY_IFNOT;
+          }
         }
       }
     }
     else if (s[1].unicode() == 'm') {
       if (s[2].unicode() == 'a') {
         if (s[3].unicode() == 'g') {
-          if (s[4].unicode() == 'e')
+          if (s[4].unicode() == 'e') {
             return T_DOXY_IMAGE;
+          }
         }
       }
     }
     else if (s[1].unicode() == 'n') {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'e') {
-          if (s[4].unicode() == 'x')
+          if (s[4].unicode() == 'x') {
             return T_DOXY_INDEX;
+          }
         }
       }
     }
@@ -620,8 +803,9 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'c') {
         if (s[3].unicode() == 'r') {
-          if (s[4].unicode() == 'o')
+          if (s[4].unicode() == 'o') {
             return T_DOXY_MACRO;
+          }
         }
       }
     }
@@ -630,8 +814,9 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'r') {
         if (s[3].unicode() == 'a') {
-          if (s[4].unicode() == 'm')
+          if (s[4].unicode() == 'm') {
             return T_DOXY_PARAM;
+          }
         }
       }
     }
@@ -640,8 +825,9 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'e') {
       if (s[2].unicode() == 'i') {
         if (s[3].unicode() == 'm') {
-          if (s[4].unicode() == 'p')
+          if (s[4].unicode() == 'p') {
             return T_DOXY_REIMP;
+          }
         }
       }
     }
@@ -650,16 +836,18 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'h') {
       if (s[2].unicode() == 'o') {
         if (s[3].unicode() == 'r') {
-          if (s[4].unicode() == 't')
+          if (s[4].unicode() == 't') {
             return T_DOXY_SHORT;
+          }
         }
       }
     }
     else if (s[1].unicode() == 'i') {
       if (s[2].unicode() == 'n') {
         if (s[3].unicode() == 'c') {
-          if (s[4].unicode() == 'e')
+          if (s[4].unicode() == 'e') {
             return T_DOXY_SINCE;
+          }
         }
       }
     }
@@ -668,24 +856,27 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'b') {
         if (s[3].unicode() == 'l') {
-          if (s[4].unicode() == 'e')
+          if (s[4].unicode() == 'e') {
             return T_DOXY_TABLE;
+          }
         }
       }
     }
     else if (s[1].unicode() == 'h') {
       if (s[2].unicode() == 'r') {
         if (s[3].unicode() == 'o') {
-          if (s[4].unicode() == 'w')
+          if (s[4].unicode() == 'w') {
             return T_DOXY_THROW;
+          }
         }
       }
     }
     else if (s[1].unicode() == 'i') {
       if (s[2].unicode() == 't') {
         if (s[3].unicode() == 'l') {
-          if (s[4].unicode() == 'e')
+          if (s[4].unicode() == 'e') {
             return T_DOXY_TITLE;
+          }
         }
       }
     }
@@ -694,14 +885,16 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'n') {
       if (s[2].unicode() == 'i') {
         if (s[3].unicode() == 'o') {
-          if (s[4].unicode() == 'n')
+          if (s[4].unicode() == 'n') {
             return T_DOXY_UNION;
+          }
         }
       }
       else if (s[2].unicode() == 't') {
         if (s[3].unicode() == 'i') {
-          if (s[4].unicode() == 'l')
+          if (s[4].unicode() == 'l') {
             return T_DOXY_UNTIL;
+          }
         }
       }
     }
@@ -710,8 +903,9 @@ static inline int classify5(const QChar *s) {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'l') {
         if (s[3].unicode() == 'u') {
-          if (s[4].unicode() == 'e')
+          if (s[4].unicode() == 'e') {
             return T_DOXY_VALUE;
+          }
         }
       }
     }
@@ -725,8 +919,9 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'c') {
         if (s[3].unicode() == 'h') {
           if (s[4].unicode() == 'o') {
-            if (s[5].unicode() == 'r')
+            if (s[5].unicode() == 'r') {
               return T_DOXY_ANCHOR;
+            }
           }
         }
       }
@@ -735,8 +930,9 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 't') {
         if (s[3].unicode() == 'h') {
           if (s[4].unicode() == 'o') {
-            if (s[5].unicode() == 'r')
+            if (s[5].unicode() == 'r') {
               return T_DOXY_AUTHOR;
+            }
           }
         }
       }
@@ -747,8 +943,9 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'm') {
         if (s[3].unicode() == 'p') {
           if (s[4].unicode() == 'a') {
-            if (s[5].unicode() == 't')
+            if (s[5].unicode() == 't') {
               return T_DOXY_COMPAT;
+            }
           }
         }
       }
@@ -759,8 +956,9 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 's') {
         if (s[3].unicode() == 'e') {
           if (s[4].unicode() == 'i') {
-            if (s[5].unicode() == 'f')
+            if (s[5].unicode() == 'f') {
               return T_DOXY_ELSEIF;
+            }
           }
         }
       }
@@ -769,14 +967,30 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'd') {
           if (s[4].unicode() == 'o') {
-            if (s[5].unicode() == 't')
+            if (s[5].unicode() == 't') {
               return T_DOXY_ENDDOT;
+            }
+          }
+        }
+        else if (s[3].unicode() == 'm') {
+          if (s[4].unicode() == 's') {
+            if (s[5].unicode() == 'c') {
+              return T_DOXY_ENDMSC;
+            }
           }
         }
         else if (s[3].unicode() == 'r') {
           if (s[4].unicode() == 'a') {
-            if (s[5].unicode() == 'w')
+            if (s[5].unicode() == 'w') {
               return T_DOXY_ENDRAW;
+            }
+          }
+        }
+        else if (s[3].unicode() == 'u') {
+          if (s[4].unicode() == 'm') {
+            if (s[5].unicode() == 'l') {
+              return T_DOXY_ENDUML;
+            }
           }
         }
       }
@@ -785,8 +999,9 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'p') {
         if (s[3].unicode() == 'i') {
           if (s[4].unicode() == 'r') {
-            if (s[5].unicode() == 'e')
+            if (s[5].unicode() == 'e') {
               return T_DOXY_EXPIRE;
+            }
           }
         }
       }
@@ -797,8 +1012,9 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'a') {
         if (s[3].unicode() == 'd') {
           if (s[4].unicode() == 'e') {
-            if (s[5].unicode() == 'r')
+            if (s[5].unicode() == 'r') {
               return T_DOXY_HEADER;
+            }
           }
         }
       }
@@ -809,8 +1025,9 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'u') {
           if (s[4].unicode() == 'l') {
-            if (s[5].unicode() == 'e')
+            if (s[5].unicode() == 'e') {
               return T_DOXY_MODULE;
+            }
           }
         }
       }
@@ -821,8 +1038,22 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'e') {
         if (s[3].unicode() == 'n') {
           if (s[4].unicode() == 'g') {
-            if (s[5].unicode() == 'l')
+            if (s[5].unicode() == 'l') {
               return T_DOXY_OPENGL;
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'p') {
+    if (s[1].unicode() == 'u') {
+      if (s[2].unicode() == 'b') {
+        if (s[3].unicode() == 'l') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'c') {
+              return T_DOXY_PUBLIC;
+            }
           }
         }
       }
@@ -830,17 +1061,37 @@ static inline int classify6(const QChar *s) {
   }
   else if (s[0].unicode() == 'r') {
     if (s[1].unicode() == 'e') {
-      if (s[2].unicode() == 't') {
+      if (s[2].unicode() == 'm') {
+        if (s[3].unicode() == 'a') {
+          if (s[4].unicode() == 'r') {
+            if (s[5].unicode() == 'k') {
+              return T_DOXY_REMARK;
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 's') {
+        if (s[3].unicode() == 'u') {
+          if (s[4].unicode() == 'l') {
+            if (s[5].unicode() == 't') {
+              return T_DOXY_RESULT;
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 't') {
         if (s[3].unicode() == 'u') {
           if (s[4].unicode() == 'r') {
-            if (s[5].unicode() == 'n')
+            if (s[5].unicode() == 'n') {
               return T_DOXY_RETURN;
+            }
           }
         }
         else if (s[3].unicode() == 'v') {
           if (s[4].unicode() == 'a') {
-            if (s[5].unicode() == 'l')
+            if (s[5].unicode() == 'l') {
               return T_DOXY_RETVAL;
+            }
           }
         }
       }
@@ -851,8 +1102,9 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'i') {
         if (s[3].unicode() == 'p') {
           if (s[4].unicode() == 't') {
-            if (s[5].unicode() == 'o')
+            if (s[5].unicode() == 'o') {
               return T_DOXY_SKIPTO;
+            }
           }
         }
       }
@@ -861,8 +1113,9 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'r') {
         if (s[3].unicode() == 'u') {
           if (s[4].unicode() == 'c') {
-            if (s[5].unicode() == 't')
+            if (s[5].unicode() == 't') {
               return T_DOXY_STRUCT;
+            }
           }
         }
       }
@@ -873,8 +1126,9 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'r') {
         if (s[3].unicode() == 'g') {
           if (s[4].unicode() == 'e') {
-            if (s[5].unicode() == 't')
+            if (s[5].unicode() == 't') {
               return T_DOXY_TARGET;
+            }
           }
         }
       }
@@ -883,8 +1137,20 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'r') {
         if (s[3].unicode() == 'o') {
           if (s[4].unicode() == 'w') {
-            if (s[5].unicode() == 's')
+            if (s[5].unicode() == 's') {
               return T_DOXY_THROWS;
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'p') {
+      if (s[2].unicode() == 'a') {
+        if (s[3].unicode() == 'r') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 'm') {
+              return T_DOXY_TPARAM;
+            }
           }
         }
       }
@@ -895,8 +1161,9 @@ static inline int classify6(const QChar *s) {
       if (s[2].unicode() == 'b') {
         if (s[3].unicode() == 'k') {
           if (s[4].unicode() == 'i') {
-            if (s[5].unicode() == 't')
+            if (s[5].unicode() == 't') {
               return T_DOXY_WEBKIT;
+            }
           }
         }
       }
@@ -906,14 +1173,30 @@ static inline int classify6(const QChar *s) {
 }
 
 static inline int classify7(const QChar *s) {
-  if (s[0].unicode() == 'b') {
+  if (s[0].unicode() == 'a') {
+    if (s[1].unicode() == 'u') {
+      if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'h') {
+          if (s[4].unicode() == 'o') {
+            if (s[5].unicode() == 'r') {
+              if (s[6].unicode() == 's') {
+                return T_DOXY_AUTHORS;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'b') {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'c') {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'd') {
-              if (s[6].unicode() == 'e')
+              if (s[6].unicode() == 'e') {
                 return T_DOXY_BADCODE;
+              }
             }
           }
         }
@@ -926,8 +1209,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 't') {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 'o') {
-              if (s[6].unicode() == 'n')
+              if (s[6].unicode() == 'n') {
                 return T_DOXY_CAPTION;
+              }
             }
           }
         }
@@ -938,8 +1222,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'p') {
           if (s[4].unicode() == 't') {
             if (s[5].unicode() == 'e') {
-              if (s[6].unicode() == 'r')
+              if (s[6].unicode() == 'r') {
                 return T_DOXY_CHAPTER;
+              }
             }
           }
         }
@@ -950,8 +1235,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'y') {
           if (s[4].unicode() == 'd') {
             if (s[5].unicode() == 'o') {
-              if (s[6].unicode() == 'c')
+              if (s[6].unicode() == 'c') {
                 return T_DOXY_COPYDOC;
+              }
             }
           }
         }
@@ -960,8 +1246,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'e') {
           if (s[4].unicode() == 'l') {
             if (s[5].unicode() == 'i') {
-              if (s[6].unicode() == 'b')
+              if (s[6].unicode() == 'b') {
                 return T_DOXY_CORELIB;
+              }
             }
           }
         }
@@ -969,13 +1256,51 @@ static inline int classify7(const QChar *s) {
     }
   }
   else if (s[0].unicode() == 'd') {
-    if (s[1].unicode() == 'o') {
+    if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 'f') {
+        if (s[3].unicode() == 'a') {
+          if (s[4].unicode() == 'u') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 't') {
+                return T_DOXY_DEFAULT;
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'a') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 's') {
+                return T_DOXY_DETAILS;
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'i') {
+      if (s[2].unicode() == 'a') {
+        if (s[3].unicode() == 'f') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 'e') {
+                return T_DOXY_DIAFILE;
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'o') {
       if (s[2].unicode() == 't') {
         if (s[3].unicode() == 'f') {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 'l') {
-              if (s[6].unicode() == 'e')
+              if (s[6].unicode() == 'e') {
                 return T_DOXY_DOTFILE;
+              }
             }
           }
         }
@@ -988,40 +1313,46 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'c') {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'd') {
-              if (s[6].unicode() == 'e')
+              if (s[6].unicode() == 'e') {
                 return T_DOXY_ENDCODE;
+              }
             }
             else if (s[5].unicode() == 'n') {
-              if (s[6].unicode() == 'd')
+              if (s[6].unicode() == 'd') {
                 return T_DOXY_ENDCOND;
+              }
             }
           }
         }
         else if (s[3].unicode() == 'l') {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 'n') {
-              if (s[6].unicode() == 'k')
+              if (s[6].unicode() == 'k') {
                 return T_DOXY_ENDLINK;
+              }
             }
             else if (s[5].unicode() == 's') {
-              if (s[6].unicode() == 't')
+              if (s[6].unicode() == 't') {
                 return T_DOXY_ENDLIST;
+              }
             }
           }
         }
         else if (s[3].unicode() == 'o') {
           if (s[4].unicode() == 'm') {
             if (s[5].unicode() == 'i') {
-              if (s[6].unicode() == 't')
+              if (s[6].unicode() == 't') {
                 return T_DOXY_ENDOMIT;
+              }
             }
           }
         }
         else if (s[3].unicode() == 'p') {
           if (s[4].unicode() == 'a') {
             if (s[5].unicode() == 'r') {
-              if (s[6].unicode() == 't')
+              if (s[6].unicode() == 't') {
                 return T_DOXY_ENDPART;
+              }
             }
           }
         }
@@ -1032,8 +1363,20 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'm') {
           if (s[4].unicode() == 'p') {
             if (s[5].unicode() == 'l') {
-              if (s[6].unicode() == 'e')
+              if (s[6].unicode() == 'e') {
                 return T_DOXY_EXAMPLE;
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'n') {
+            if (s[5].unicode() == 'd') {
+              if (s[6].unicode() == 's') {
+                return T_DOXY_EXTENDS;
+              }
             }
           }
         }
@@ -1046,8 +1389,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'l') {
           if (s[4].unicode() == 'u') {
             if (s[5].unicode() == 'd') {
-              if (s[6].unicode() == 'e')
+              if (s[6].unicode() == 'e') {
                 return T_DOXY_INCLUDE;
+              }
             }
           }
         }
@@ -1056,8 +1400,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'r') {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'u') {
-              if (s[6].unicode() == 'p')
+              if (s[6].unicode() == 'p') {
                 return T_DOXY_INGROUP;
+              }
             }
           }
         }
@@ -1070,8 +1415,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'w') {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'r') {
-              if (s[6].unicode() == 'd')
+              if (s[6].unicode() == 'd') {
                 return T_DOXY_KEYWORD;
+              }
             }
           }
         }
@@ -1084,8 +1430,22 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'o') {
           if (s[4].unicode() == 'n') {
             if (s[5].unicode() == 'l') {
-              if (s[6].unicode() == 'y')
+              if (s[6].unicode() == 'y') {
                 return T_DOXY_MANONLY;
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 's') {
+      if (s[2].unicode() == 'c') {
+        if (s[3].unicode() == 'f') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 'e') {
+                return T_DOXY_MSCFILE;
+              }
             }
           }
         }
@@ -1098,8 +1458,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'w') {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'r') {
-              if (s[6].unicode() == 'k')
+              if (s[6].unicode() == 'k') {
                 return T_DOXY_NETWORK;
+              }
             }
           }
         }
@@ -1108,8 +1469,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'c') {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'd') {
-              if (s[6].unicode() == 'e')
+              if (s[6].unicode() == 'e') {
                 return T_DOXY_NEWCODE;
+              }
             }
           }
         }
@@ -1122,8 +1484,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'c') {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'd') {
-              if (s[6].unicode() == 'e')
+              if (s[6].unicode() == 'e') {
                 return T_DOXY_OLDCODE;
+              }
             }
           }
         }
@@ -1136,8 +1499,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'k') {
           if (s[4].unicode() == 'a') {
             if (s[5].unicode() == 'g') {
-              if (s[6].unicode() == 'e')
+              if (s[6].unicode() == 'e') {
                 return T_DOXY_PACKAGE;
+              }
             }
           }
         }
@@ -1148,8 +1512,33 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'n') {
           if (s[4].unicode() == 't') {
             if (s[5].unicode() == 't') {
-              if (s[6].unicode() == 'o')
+              if (s[6].unicode() == 'o') {
                 return T_DOXY_PRINTTO;
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 'v') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 't') {
+              if (s[6].unicode() == 'e') {
+                return T_DOXY_PRIVATE;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'q') {
+    if (s[1].unicode() == 'm') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'y') {
+            if (s[5].unicode() == 'p') {
+              if (s[6].unicode() == 'e') {
+                return T_DOXY_QMLTYPE;
+              }
             }
           }
         }
@@ -1158,12 +1547,27 @@ static inline int classify7(const QChar *s) {
   }
   else if (s[0].unicode() == 'r') {
     if (s[1].unicode() == 'e') {
-      if (s[2].unicode() == 'l') {
+      if (s[2].unicode() == 'f') {
+        if (s[3].unicode() == 'i') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'e') {
+              if (s[6].unicode() == 'm') {
+                return T_DOXY_REFITEM;
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 'l') {
         if (s[3].unicode() == 'a') {
           if (s[4].unicode() == 't') {
             if (s[5].unicode() == 'e') {
-              if (s[6].unicode() == 's')
+              if (s[6].unicode() == 'd') {
+                return T_DOXY_RELATED;
+              }
+              else if (s[6].unicode() == 's') {
                 return T_DOXY_RELATES;
+              }
             }
           }
         }
@@ -1172,8 +1576,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'a') {
           if (s[4].unicode() == 'r') {
             if (s[5].unicode() == 'k') {
-              if (s[6].unicode() == 's')
+              if (s[6].unicode() == 's') {
                 return T_DOXY_REMARKS;
+              }
             }
           }
         }
@@ -1182,8 +1587,22 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'u') {
           if (s[4].unicode() == 'r') {
             if (s[5].unicode() == 'n') {
-              if (s[6].unicode() == 's')
+              if (s[6].unicode() == 's') {
                 return T_DOXY_RETURNS;
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 't') {
+      if (s[2].unicode() == 'f') {
+        if (s[3].unicode() == 'o') {
+          if (s[4].unicode() == 'n') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 'y') {
+                return T_DOXY_RTFONLY;
+              }
             }
           }
         }
@@ -1196,8 +1615,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 't') {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 'o') {
-              if (s[6].unicode() == 'n')
+              if (s[6].unicode() == 'n') {
                 return T_DOXY_SECTION;
+              }
             }
           }
         }
@@ -1206,8 +1626,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'v') {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 'c') {
-              if (s[6].unicode() == 'e')
+              if (s[6].unicode() == 'e') {
                 return T_DOXY_SERVICE;
+              }
             }
           }
         }
@@ -1218,8 +1639,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'e') {
           if (s[4].unicode() == 'b') {
             if (s[5].unicode() == 'a') {
-              if (s[6].unicode() == 'r')
+              if (s[6].unicode() == 'r') {
                 return T_DOXY_SIDEBAR;
+              }
             }
           }
         }
@@ -1230,8 +1652,22 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'p') {
           if (s[4].unicode() == 'p') {
             if (s[5].unicode() == 'e') {
-              if (s[6].unicode() == 't')
+              if (s[6].unicode() == 't') {
                 return T_DOXY_SNIPPET;
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'u') {
+      if (s[2].unicode() == 'b') {
+        if (s[3].unicode() == 'p') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 'g') {
+              if (s[6].unicode() == 'e') {
+                return T_DOXY_SUBPAGE;
+              }
             }
           }
         }
@@ -1244,8 +1680,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'e') {
           if (s[4].unicode() == 'd') {
             if (s[5].unicode() == 'e') {
-              if (s[6].unicode() == 'f')
+              if (s[6].unicode() == 'f') {
                 return T_DOXY_TYPEDEF;
+              }
             }
           }
         }
@@ -1258,8 +1695,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'o') {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'l') {
-              if (s[6].unicode() == 's')
+              if (s[6].unicode() == 's') {
                 return T_DOXY_UITOOLS;
+              }
             }
           }
         }
@@ -1270,8 +1708,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'c') {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'd') {
-              if (s[6].unicode() == 'e')
+              if (s[6].unicode() == 'e') {
                 return T_DOXY_UNICODE;
+              }
             }
           }
         }
@@ -1284,8 +1723,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 's') {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 'o') {
-              if (s[6].unicode() == 'n')
+              if (s[6].unicode() == 'n') {
                 return T_DOXY_VERSION;
+              }
             }
           }
         }
@@ -1298,8 +1738,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'n') {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 'n') {
-              if (s[6].unicode() == 'g')
+              if (s[6].unicode() == 'g') {
                 return T_DOXY_WARNING;
+              }
             }
           }
         }
@@ -1312,8 +1753,9 @@ static inline int classify7(const QChar *s) {
         if (s[3].unicode() == 'o') {
           if (s[4].unicode() == 'n') {
             if (s[5].unicode() == 'l') {
-              if (s[6].unicode() == 'y')
+              if (s[6].unicode() == 'y') {
                 return T_DOXY_XMLONLY;
+              }
             }
           }
         }
@@ -1331,8 +1773,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'r') {
             if (s[5].unicode() == 'a') {
               if (s[6].unicode() == 'c') {
-                if (s[7].unicode() == 't')
+                if (s[7].unicode() == 't') {
                   return T_DOXY_ABSTRACT;
+                }
               }
             }
           }
@@ -1345,8 +1788,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'n') {
             if (s[5].unicode() == 'd') {
               if (s[6].unicode() == 'e') {
-                if (s[7].unicode() == 'x')
+                if (s[7].unicode() == 'x') {
                   return T_DOXY_ADDINDEX;
+                }
               }
             }
           }
@@ -1361,8 +1805,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'n') {
             if (s[5].unicode() == 'a') {
               if (s[6].unicode() == 'm') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_BASENAME;
+                }
               }
             }
           }
@@ -1371,14 +1816,30 @@ static inline int classify8(const QChar *s) {
     }
   }
   else if (s[0].unicode() == 'c') {
-    if (s[1].unicode() == 'o') {
+    if (s[1].unicode() == 'a') {
+      if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'g') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 'r') {
+                if (s[7].unicode() == 'y') {
+                  return T_DOXY_CATEGORY;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'o') {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'e') {
           if (s[4].unicode() == 'l') {
             if (s[5].unicode() == 'i') {
               if (s[6].unicode() == 'n') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_CODELINE;
+                }
               }
             }
           }
@@ -1393,8 +1854,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'r') {
             if (s[5].unicode() == 'o') {
               if (s[6].unicode() == 'u') {
-                if (s[7].unicode() == 'p')
+                if (s[7].unicode() == 'p') {
                   return T_DOXY_DEFGROUP;
+                }
               }
             }
           }
@@ -1409,8 +1871,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'a') {
             if (s[5].unicode() == 'b') {
               if (s[6].unicode() == 'l') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_ENDTABLE;
+                }
               }
             }
           }
@@ -1425,8 +1888,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'n') {
             if (s[5].unicode() == 'o') {
               if (s[6].unicode() == 't') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_FOOTNOTE;
+                }
               }
             }
           }
@@ -1441,8 +1905,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'n') {
               if (s[6].unicode() == 'l') {
-                if (s[7].unicode() == 'y')
+                if (s[7].unicode() == 'y') {
                   return T_DOXY_HTMLONLY;
+                }
               }
             }
           }
@@ -1452,13 +1917,27 @@ static inline int classify8(const QChar *s) {
   }
   else if (s[0].unicode() == 'i') {
     if (s[1].unicode() == 'n') {
-      if (s[2].unicode() == 'm') {
+      if (s[2].unicode() == 'h') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'r') {
+            if (s[5].unicode() == 'i') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 's') {
+                  return T_DOXY_INHERITS;
+                }
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 'm') {
         if (s[3].unicode() == 'o') {
           if (s[4].unicode() == 'd') {
             if (s[5].unicode() == 'u') {
               if (s[6].unicode() == 'l') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_INMODULE;
+                }
               }
             }
           }
@@ -1469,8 +1948,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'r') {
             if (s[5].unicode() == 'n') {
               if (s[6].unicode() == 'a') {
-                if (s[7].unicode() == 'l')
+                if (s[7].unicode() == 'l') {
                   return T_DOXY_INTERNAL;
+                }
               }
             }
           }
@@ -1485,8 +1965,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'l') {
             if (s[5].unicode() == 'e') {
               if (s[6].unicode() == 's') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_LEGALESE;
+                }
               }
             }
           }
@@ -1501,8 +1982,24 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'p') {
             if (s[5].unicode() == 'a') {
               if (s[6].unicode() == 'g') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_MAINPAGE;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 'm') {
+        if (s[3].unicode() == 'b') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'r') {
+              if (s[6].unicode() == 'o') {
+                if (s[7].unicode() == 'f') {
+                  return T_DOXY_MEMBEROF;
+                }
               }
             }
           }
@@ -1517,8 +2014,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'p') {
             if (s[5].unicode() == 'a') {
               if (s[6].unicode() == 'g') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_NEXTPAGE;
+                }
               }
             }
           }
@@ -1533,8 +2031,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'l') {
             if (s[5].unicode() == 'e') {
               if (s[6].unicode() == 't') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_OBSOLETE;
+                }
               }
             }
           }
@@ -1547,8 +2046,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'l') {
             if (s[5].unicode() == 'o') {
               if (s[6].unicode() == 'a') {
-                if (s[7].unicode() == 'd')
+                if (s[7].unicode() == 'd') {
                   return T_DOXY_OVERLOAD;
+                }
               }
             }
           }
@@ -1557,14 +2057,41 @@ static inline int classify8(const QChar *s) {
     }
   }
   else if (s[0].unicode() == 'p') {
-    if (s[1].unicode() == 'r') {
+    if (s[1].unicode() == 'a') {
+      if (s[2].unicode() == 'r') {
+        if (s[3].unicode() == 'b') {
+          if (s[4].unicode() == 'l') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 'c') {
+                if (s[7].unicode() == 'k') {
+                  return T_DOXY_PARBLOCK;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'r') {
       if (s[2].unicode() == 'o') {
         if (s[3].unicode() == 'p') {
           if (s[4].unicode() == 'e') {
             if (s[5].unicode() == 'r') {
               if (s[6].unicode() == 't') {
-                if (s[7].unicode() == 'y')
+                if (s[7].unicode() == 'y') {
                   return T_DOXY_PROPERTY;
+                }
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'o') {
+            if (s[5].unicode() == 'c') {
+              if (s[6].unicode() == 'o') {
+                if (s[7].unicode() == 'l') {
+                  return T_DOXY_PROTOCOL;
+                }
               }
             }
           }
@@ -1573,14 +2100,30 @@ static inline int classify8(const QChar *s) {
     }
   }
   else if (s[0].unicode() == 'q') {
-    if (s[1].unicode() == 't') {
+    if (s[1].unicode() == 'm') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 'c') {
+          if (s[4].unicode() == 'l') {
+            if (s[5].unicode() == 'a') {
+              if (s[6].unicode() == 's') {
+                if (s[7].unicode() == 's') {
+                  return T_DOXY_QMLCLASS;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 't') {
       if (s[2].unicode() == 'e') {
         if (s[3].unicode() == 's') {
           if (s[4].unicode() == 't') {
             if (s[5].unicode() == 'l') {
               if (s[6].unicode() == 'i') {
-                if (s[7].unicode() == 'b')
+                if (s[7].unicode() == 'b') {
                   return T_DOXY_QTESTLIB;
+                }
               }
             }
           }
@@ -1595,14 +2138,18 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 'o') {
               if (s[6].unicode() == 'n') {
-                if (s[7].unicode() == '1')
+                if (s[7].unicode() == '1') {
                   return T_DOXY_SECTION1;
-                else if (s[7].unicode() == '2')
+                }
+                else if (s[7].unicode() == '2') {
                   return T_DOXY_SECTION2;
-                else if (s[7].unicode() == '3')
+                }
+                else if (s[7].unicode() == '3') {
                   return T_DOXY_SECTION3;
-                else if (s[7].unicode() == '4')
+                }
+                else if (s[7].unicode() == '4') {
                   return T_DOXY_SECTION4;
+                }
               }
             }
           }
@@ -1615,8 +2162,24 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'l') {
             if (s[5].unicode() == 'i') {
               if (s[6].unicode() == 'n') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_SKIPLINE;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 't') {
+      if (s[2].unicode() == 'a') {
+        if (s[3].unicode() == 'r') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'u') {
+              if (s[6].unicode() == 'm') {
+                if (s[7].unicode() == 'l') {
+                  return T_DOXY_STARTUML;
+                }
               }
             }
           }
@@ -1629,8 +2192,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 't') {
               if (s[6].unicode() == 'l') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_SUBTITLE;
+                }
               }
             }
           }
@@ -1645,8 +2209,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'a') {
             if (s[5].unicode() == 'b') {
               if (s[6].unicode() == 'l') {
-                if (s[7].unicode() == 'e')
+                if (s[7].unicode() == 'e') {
                   return T_DOXY_VARIABLE;
+                }
               }
             }
           }
@@ -1659,8 +2224,24 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'a') {
             if (s[5].unicode() == 't') {
               if (s[6].unicode() == 'i') {
-                if (s[7].unicode() == 'm')
+                if (s[7].unicode() == 'm') {
                   return T_DOXY_VERBATIM;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'h') {
+      if (s[2].unicode() == 'd') {
+        if (s[3].unicode() == 'l') {
+          if (s[4].unicode() == 'f') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 'o') {
+                if (s[7].unicode() == 'w') {
+                  return T_DOXY_VHDLFLOW;
+                }
               }
             }
           }
@@ -1675,8 +2256,9 @@ static inline int classify8(const QChar *s) {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 't') {
               if (s[6].unicode() == 'e') {
-                if (s[7].unicode() == 'm')
+                if (s[7].unicode() == 'm') {
                   return T_DOXY_XREFITEM;
+                }
               }
             }
           }
@@ -1696,8 +2278,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 't') {
               if (s[6].unicode() == 'i') {
                 if (s[7].unicode() == 'o') {
-                  if (s[8].unicode() == 'n')
+                  if (s[8].unicode() == 'n') {
                     return T_DOXY_ATTENTION;
+                  }
                 }
               }
             }
@@ -1714,8 +2297,37 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'r') {
               if (s[6].unicode() == 'a') {
                 if (s[7].unicode() == 'p') {
-                  if (s[8].unicode() == 'h')
+                  if (s[8].unicode() == 'h') {
                     return T_DOXY_CALLGRAPH;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'p') {
+        if (s[3].unicode() == 'y') {
+          if (s[4].unicode() == 'b') {
+            if (s[5].unicode() == 'r') {
+              if (s[6].unicode() == 'i') {
+                if (s[7].unicode() == 'e') {
+                  if (s[8].unicode() == 'f') {
+                    return T_DOXY_COPYBRIEF;
+                  }
+                }
+              }
+            }
+          }
+          else if (s[4].unicode() == 'r') {
+            if (s[5].unicode() == 'i') {
+              if (s[6].unicode() == 'g') {
+                if (s[7].unicode() == 'h') {
+                  if (s[8].unicode() == 't') {
+                    return T_DOXY_COPYRIGHT;
+                  }
                 }
               }
             }
@@ -1732,8 +2344,28 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 't') {
               if (s[6].unicode() == 'i') {
                 if (s[7].unicode() == 'o') {
-                  if (s[8].unicode() == 'n')
+                  if (s[8].unicode() == 'n') {
                     return T_DOXY_EXCEPTION;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'i') {
+    if (s[1].unicode() == 'd') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'x') {
+            if (s[5].unicode() == 'c') {
+              if (s[6].unicode() == 'e') {
+                if (s[7].unicode() == 'p') {
+                  if (s[8].unicode() == 't') {
+                    return T_DOXY_IDLEXCEPT;
+                  }
                 }
               }
             }
@@ -1741,17 +2373,16 @@ static inline int classify9(const QChar *s) {
         }
       }
     }
-  }
-  else if (s[0].unicode() == 'i') {
-    if (s[1].unicode() == 'n') {
+    else if (s[1].unicode() == 'n') {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'e') {
           if (s[4].unicode() == 'x') {
             if (s[5].unicode() == 'p') {
               if (s[6].unicode() == 'a') {
                 if (s[7].unicode() == 'g') {
-                  if (s[8].unicode() == 'e')
+                  if (s[8].unicode() == 'e') {
                     return T_DOXY_INDEXPAGE;
+                  }
                 }
               }
             }
@@ -1764,8 +2395,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'f') {
               if (s[6].unicode() == 'a') {
                 if (s[7].unicode() == 'c') {
-                  if (s[8].unicode() == 'e')
+                  if (s[8].unicode() == 'e') {
                     return T_DOXY_INTERFACE;
+                  }
                 }
               }
             }
@@ -1778,8 +2410,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'i') {
               if (s[6].unicode() == 'a') {
                 if (s[7].unicode() == 'n') {
-                  if (s[8].unicode() == 't')
+                  if (s[8].unicode() == 't') {
                     return T_DOXY_INVARIANT;
+                  }
                 }
               }
             }
@@ -1796,8 +2429,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'o') {
               if (s[6].unicode() == 'n') {
                 if (s[7].unicode() == 'l') {
-                  if (s[8].unicode() == 'y')
+                  if (s[8].unicode() == 'y') {
                     return T_DOXY_LATEXONLY;
+                  }
                 }
               }
             }
@@ -1814,8 +2448,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'l') {
               if (s[6].unicode() == 'a') {
                 if (s[7].unicode() == 's') {
-                  if (s[8].unicode() == 's')
+                  if (s[8].unicode() == 's') {
                     return T_DOXY_MAINCLASS;
+                  }
                 }
               }
             }
@@ -1832,8 +2467,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'p') {
               if (s[6].unicode() == 'a') {
                 if (s[7].unicode() == 'c') {
-                  if (s[8].unicode() == 'e')
+                  if (s[8].unicode() == 'e') {
                     return T_DOXY_NAMESPACE;
+                  }
                 }
               }
             }
@@ -1850,8 +2486,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'a') {
               if (s[6].unicode() == 'l') {
                 if (s[7].unicode() == 'u') {
-                  if (s[8].unicode() == 'e')
+                  if (s[8].unicode() == 'e') {
                     return T_DOXY_OMITVALUE;
+                  }
                 }
               }
             }
@@ -1868,8 +2505,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'r') {
               if (s[6].unicode() == 'a') {
                 if (s[7].unicode() == 'p') {
-                  if (s[8].unicode() == 'h')
+                  if (s[8].unicode() == 'h') {
                     return T_DOXY_PARAGRAPH;
+                  }
                 }
               }
             }
@@ -1884,8 +2522,24 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'l') {
               if (s[6].unicode() == 'i') {
                 if (s[7].unicode() == 'n') {
-                  if (s[8].unicode() == 'e')
+                  if (s[8].unicode() == 'e') {
                     return T_DOXY_PRINTLINE;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 'o') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'c') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'e') {
+                  if (s[8].unicode() == 'd') {
+                    return T_DOXY_PROTECTED;
+                  }
                 }
               }
             }
@@ -1895,15 +2549,57 @@ static inline int classify9(const QChar *s) {
     }
   }
   else if (s[0].unicode() == 'q') {
-    if (s[1].unicode() == 'u') {
+    if (s[1].unicode() == 'm') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 'm') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 't') {
+              if (s[6].unicode() == 'h') {
+                if (s[7].unicode() == 'o') {
+                  if (s[8].unicode() == 'd') {
+                    return T_DOXY_QMLMETHOD;
+                  }
+                }
+              }
+            }
+          }
+          else if (s[4].unicode() == 'o') {
+            if (s[5].unicode() == 'd') {
+              if (s[6].unicode() == 'u') {
+                if (s[7].unicode() == 'l') {
+                  if (s[8].unicode() == 'e') {
+                    return T_DOXY_QMLMODULE;
+                  }
+                }
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 's') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'g') {
+              if (s[6].unicode() == 'n') {
+                if (s[7].unicode() == 'a') {
+                  if (s[8].unicode() == 'l') {
+                    return T_DOXY_QMLSIGNAL;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'u') {
       if (s[2].unicode() == 'o') {
         if (s[3].unicode() == 't') {
           if (s[4].unicode() == 'a') {
             if (s[5].unicode() == 't') {
               if (s[6].unicode() == 'i') {
                 if (s[7].unicode() == 'o') {
-                  if (s[8].unicode() == 'n')
+                  if (s[8].unicode() == 'n') {
                     return T_DOXY_QUOTATION;
+                  }
                 }
               }
             }
@@ -1912,8 +2608,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'f') {
               if (s[6].unicode() == 'i') {
                 if (s[7].unicode() == 'l') {
-                  if (s[8].unicode() == 'e')
+                  if (s[8].unicode() == 'e') {
                     return T_DOXY_QUOTEFILE;
+                  }
                 }
               }
             }
@@ -1930,8 +2627,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'r') {
               if (s[6].unicode() == 'a') {
                 if (s[7].unicode() == 'n') {
-                  if (s[8].unicode() == 't')
+                  if (s[8].unicode() == 't') {
                     return T_DOXY_REENTRANT;
+                  }
                 }
               }
             }
@@ -1948,8 +2646,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'n') {
               if (s[6].unicode() == 't') {
                 if (s[7].unicode() == 'i') {
-                  if (s[8].unicode() == 'l')
+                  if (s[8].unicode() == 'l') {
                     return T_DOXY_SKIPUNTIL;
+                  }
                 }
               }
             }
@@ -1964,8 +2663,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'p') {
               if (s[6].unicode() == 'a') {
                 if (s[7].unicode() == 'g') {
-                  if (s[8].unicode() == 'e')
+                  if (s[8].unicode() == 'e') {
                     return T_DOXY_STARTPAGE;
+                  }
                 }
               }
             }
@@ -1975,15 +2675,33 @@ static inline int classify9(const QChar *s) {
     }
   }
   else if (s[0].unicode() == 'u') {
-    if (s[1].unicode() == 'n') {
+    if (s[1].unicode() == 'i') {
+      if (s[2].unicode() == 'c') {
+        if (s[3].unicode() == 'o') {
+          if (s[4].unicode() == 'n') {
+            if (s[5].unicode() == 't') {
+              if (s[6].unicode() == 'r') {
+                if (s[7].unicode() == 'o') {
+                  if (s[8].unicode() == 'l') {
+                    return T_DOXY_UICONTROL;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'n') {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'e') {
           if (s[4].unicode() == 'r') {
             if (s[5].unicode() == 'l') {
               if (s[6].unicode() == 'i') {
                 if (s[7].unicode() == 'n') {
-                  if (s[8].unicode() == 'e')
+                  if (s[8].unicode() == 'e') {
                     return T_DOXY_UNDERLINE;
+                  }
                 }
               }
             }
@@ -2000,8 +2718,9 @@ static inline int classify9(const QChar *s) {
             if (s[5].unicode() == 'r') {
               if (s[6].unicode() == 'o') {
                 if (s[7].unicode() == 'u') {
-                  if (s[8].unicode() == 'p')
+                  if (s[8].unicode() == 'p') {
                     return T_DOXY_WEAKGROUP;
+                  }
                 }
               }
             }
@@ -2023,8 +2742,9 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 'r') {
                 if (s[7].unicode() == 'o') {
                   if (s[8].unicode() == 'u') {
-                    if (s[9].unicode() == 'p')
+                    if (s[9].unicode() == 'p') {
                       return T_DOXY_ADDTOGROUP;
+                    }
                   }
                 }
               }
@@ -2043,8 +2763,9 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 'a') {
                 if (s[7].unicode() == 't') {
                   if (s[8].unicode() == 'e') {
-                    if (s[9].unicode() == 'd')
+                    if (s[9].unicode() == 'd') {
                       return T_DOXY_DEPRECATED;
+                    }
                   }
                 }
               }
@@ -2063,8 +2784,9 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 'p') {
                 if (s[7].unicode() == 't') {
                   if (s[8].unicode() == 'e') {
-                    if (s[9].unicode() == 'r')
+                    if (s[9].unicode() == 'r') {
                       return T_DOXY_ENDCHAPTER;
+                    }
                   }
                 }
               }
@@ -2077,8 +2799,24 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 'o') {
                 if (s[7].unicode() == 'n') {
                   if (s[8].unicode() == 'l') {
-                    if (s[9].unicode() == 'y')
+                    if (s[9].unicode() == 'y') {
                       return T_DOXY_ENDMANONLY;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 'r') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'f') {
+              if (s[6].unicode() == 'o') {
+                if (s[7].unicode() == 'n') {
+                  if (s[8].unicode() == 'l') {
+                    if (s[9].unicode() == 'y') {
+                      return T_DOXY_ENDRTFONLY;
+                    }
                   }
                 }
               }
@@ -2091,8 +2829,9 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 'e') {
                 if (s[7].unicode() == 'b') {
                   if (s[8].unicode() == 'a') {
-                    if (s[9].unicode() == 'r')
+                    if (s[9].unicode() == 'r') {
                       return T_DOXY_ENDSIDEBAR;
+                    }
                   }
                 }
               }
@@ -2105,8 +2844,9 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 'o') {
                 if (s[7].unicode() == 'n') {
                   if (s[8].unicode() == 'l') {
-                    if (s[9].unicode() == 'y')
+                    if (s[9].unicode() == 'y') {
                       return T_DOXY_ENDXMLONLY;
+                    }
                   }
                 }
               }
@@ -2123,8 +2863,9 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 'i') {
                 if (s[7].unicode() == 'o') {
                   if (s[8].unicode() == 'n') {
-                    if (s[9].unicode() == 's')
+                    if (s[9].unicode() == 's') {
                       return T_DOXY_EXCEPTIONS;
+                    }
                   }
                 }
               }
@@ -2143,8 +2884,51 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 'f') {
                 if (s[7].unicode() == 'i') {
                   if (s[8].unicode() == 'l') {
-                    if (s[9].unicode() == 'e')
+                    if (s[9].unicode() == 'e') {
                       return T_DOXY_HEADERFILE;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'i') {
+    if (s[1].unicode() == 'm') {
+      if (s[2].unicode() == 'p') {
+        if (s[3].unicode() == 'l') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'm') {
+              if (s[6].unicode() == 'e') {
+                if (s[7].unicode() == 'n') {
+                  if (s[8].unicode() == 't') {
+                    if (s[9].unicode() == 's') {
+                      return T_DOXY_IMPLEMENTS;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'n') {
+    if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'a') {
+        if (s[3].unicode() == 'u') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 'l') {
+                if (s[7].unicode() == 'i') {
+                  if (s[8].unicode() == 's') {
+                    if (s[9].unicode() == 't') {
+                      return T_DOXY_NOAUTOLIST;
+                    }
                   }
                 }
               }
@@ -2163,8 +2947,9 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 'n') {
                 if (s[7].unicode() == 't') {
                   if (s[8].unicode() == 'i') {
-                    if (s[9].unicode() == 'l')
+                    if (s[9].unicode() == 'l') {
                       return T_DOXY_PRINTUNTIL;
+                    }
                   }
                 }
               }
@@ -2183,8 +2968,9 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 'p') {
                 if (s[7].unicode() == 'o') {
                   if (s[8].unicode() == 'r') {
-                    if (s[9].unicode() == 't')
+                    if (s[9].unicode() == 't') {
                       return T_DOXY_QT3SUPPORT;
+                    }
                   }
                 }
               }
@@ -2195,7 +2981,26 @@ static inline int classify10(const QChar *s) {
     }
   }
   else if (s[0].unicode() == 's') {
-    if (s[1].unicode() == 'u') {
+    if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 'c') {
+        if (s[3].unicode() == 'r') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'f') {
+              if (s[6].unicode() == 'l') {
+                if (s[7].unicode() == 'i') {
+                  if (s[8].unicode() == 's') {
+                    if (s[9].unicode() == 't') {
+                      return T_DOXY_SECREFLIST;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'u') {
       if (s[2].unicode() == 'b') {
         if (s[3].unicode() == 's') {
           if (s[4].unicode() == 'e') {
@@ -2203,8 +3008,9 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 't') {
                 if (s[7].unicode() == 'i') {
                   if (s[8].unicode() == 'o') {
-                    if (s[9].unicode() == 'n')
+                    if (s[9].unicode() == 'n') {
                       return T_DOXY_SUBSECTION;
+                    }
                   }
                 }
               }
@@ -2223,8 +3029,9 @@ static inline int classify10(const QChar *s) {
               if (s[6].unicode() == 's') {
                 if (s[7].unicode() == 'a') {
                   if (s[8].unicode() == 'f') {
-                    if (s[9].unicode() == 'e')
+                    if (s[9].unicode() == 'e') {
                       return T_DOXY_THREADSAFE;
+                    }
                   }
                 }
               }
@@ -2238,9 +3045,72 @@ static inline int classify10(const QChar *s) {
 }
 
 static inline int classify11(const QChar *s) {
-  if (s[0].unicode() == 'd') {
+  if (s[0].unicode() == 'c') {
+    if (s[1].unicode() == 'a') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 'l') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'r') {
+              if (s[6].unicode() == 'g') {
+                if (s[7].unicode() == 'r') {
+                  if (s[8].unicode() == 'a') {
+                    if (s[9].unicode() == 'p') {
+                      if (s[10].unicode() == 'h') {
+                        return T_DOXY_CALLERGRAPH;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'p') {
+        if (s[3].unicode() == 'y') {
+          if (s[4].unicode() == 'd') {
+            if (s[5].unicode() == 'e') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'a') {
+                  if (s[8].unicode() == 'i') {
+                    if (s[9].unicode() == 'l') {
+                      if (s[10].unicode() == 's') {
+                        return T_DOXY_COPYDETAILS;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'd') {
     if (s[1].unicode() == 'o') {
-      if (s[2].unicode() == 'n') {
+      if (s[2].unicode() == 'c') {
+        if (s[3].unicode() == 'b') {
+          if (s[4].unicode() == 'o') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 'k') {
+                if (s[7].unicode() == 'o') {
+                  if (s[8].unicode() == 'n') {
+                    if (s[9].unicode() == 'l') {
+                      if (s[10].unicode() == 'y') {
+                        return T_DOXY_DOCBOOKONLY;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 'n') {
         if (s[3].unicode() == 't') {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 'n') {
@@ -2248,8 +3118,9 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'l') {
                   if (s[8].unicode() == 'u') {
                     if (s[9].unicode() == 'd') {
-                      if (s[10].unicode() == 'e')
+                      if (s[10].unicode() == 'e') {
                         return T_DOXY_DONTINCLUDE;
+                      }
                     }
                   }
                 }
@@ -2270,8 +3141,9 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'r') {
                   if (s[8].unicode() == 'a') {
                     if (s[9].unicode() == 'c') {
-                      if (s[10].unicode() == 't')
+                      if (s[10].unicode() == 't') {
                         return T_DOXY_ENDABSTRACT;
+                      }
                     }
                   }
                 }
@@ -2286,8 +3158,9 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'n') {
                   if (s[8].unicode() == 'o') {
                     if (s[9].unicode() == 't') {
-                      if (s[10].unicode() == 'e')
+                      if (s[10].unicode() == 'e') {
                         return T_DOXY_ENDFOOTNOTE;
+                      }
                     }
                   }
                 }
@@ -2302,8 +3175,26 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'o') {
                   if (s[8].unicode() == 'n') {
                     if (s[9].unicode() == 'l') {
-                      if (s[10].unicode() == 'y')
+                      if (s[10].unicode() == 'y') {
                         return T_DOXY_ENDHTMLONLY;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 'i') {
+          if (s[4].unicode() == 'n') {
+            if (s[5].unicode() == 't') {
+              if (s[6].unicode() == 'e') {
+                if (s[7].unicode() == 'r') {
+                  if (s[8].unicode() == 'n') {
+                    if (s[9].unicode() == 'a') {
+                      if (s[10].unicode() == 'l') {
+                        return T_DOXY_ENDINTERNAL;
+                      }
                     }
                   }
                 }
@@ -2318,8 +3209,26 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'l') {
                   if (s[8].unicode() == 'e') {
                     if (s[9].unicode() == 's') {
-                      if (s[10].unicode() == 'e')
+                      if (s[10].unicode() == 'e') {
                         return T_DOXY_ENDLEGALESE;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 'p') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 'r') {
+              if (s[6].unicode() == 'b') {
+                if (s[7].unicode() == 'l') {
+                  if (s[8].unicode() == 'o') {
+                    if (s[9].unicode() == 'c') {
+                      if (s[10].unicode() == 'k') {
+                        return T_DOXY_ENDPARBLOCK;
+                      }
                     }
                   }
                 }
@@ -2334,14 +3243,18 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'i') {
                   if (s[8].unicode() == 'o') {
                     if (s[9].unicode() == 'n') {
-                      if (s[10].unicode() == '1')
+                      if (s[10].unicode() == '1') {
                         return T_DOXY_ENDSECTION1;
-                      else if (s[10].unicode() == '2')
+                      }
+                      else if (s[10].unicode() == '2') {
                         return T_DOXY_ENDSECTION2;
-                      else if (s[10].unicode() == '3')
+                      }
+                      else if (s[10].unicode() == '3') {
                         return T_DOXY_ENDSECTION3;
-                      else if (s[10].unicode() == '4')
+                      }
+                      else if (s[10].unicode() == '4') {
                         return T_DOXY_ENDSECTION4;
+                      }
                     }
                   }
                 }
@@ -2356,8 +3269,9 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'a') {
                   if (s[8].unicode() == 't') {
                     if (s[9].unicode() == 'i') {
-                      if (s[10].unicode() == 'm')
+                      if (s[10].unicode() == 'm') {
                         return T_DOXY_ENDVERBATIM;
+                      }
                     }
                   }
                 }
@@ -2378,8 +3292,9 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'r') {
                   if (s[8].unicode() == 'i') {
                     if (s[9].unicode() == 't') {
-                      if (s[10].unicode() == 'y')
+                      if (s[10].unicode() == 'y') {
                         return T_DOXY_GRANULARITY;
+                      }
                     }
                   }
                 }
@@ -2400,8 +3315,9 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'l') {
                   if (s[8].unicode() == 'u') {
                     if (s[9].unicode() == 'd') {
-                      if (s[10].unicode() == 'e')
+                      if (s[10].unicode() == 'e') {
                         return T_DOXY_HTMLINCLUDE;
+                      }
                     }
                   }
                 }
@@ -2422,8 +3338,28 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'm') {
                   if (s[8].unicode() == 'a') {
                     if (s[9].unicode() == 'g') {
-                      if (s[10].unicode() == 'e')
+                      if (s[10].unicode() == 'e') {
                         return T_DOXY_INLINEIMAGE;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 'q') {
+        if (s[3].unicode() == 'm') {
+          if (s[4].unicode() == 'l') {
+            if (s[5].unicode() == 'm') {
+              if (s[6].unicode() == 'o') {
+                if (s[7].unicode() == 'd') {
+                  if (s[8].unicode() == 'u') {
+                    if (s[9].unicode() == 'l') {
+                      if (s[10].unicode() == 'e') {
+                        return T_DOXY_INQMLMODULE;
+                      }
                     }
                   }
                 }
@@ -2444,8 +3380,49 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'n') {
                   if (s[8].unicode() == 'a') {
                     if (s[9].unicode() == 'r') {
-                      if (s[10].unicode() == 'y')
+                      if (s[10].unicode() == 'y') {
                         return T_DOXY_PRELIMINARY;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'q') {
+    if (s[1].unicode() == 'm') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 'a') {
+          if (s[4].unicode() == 'b') {
+            if (s[5].unicode() == 's') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'r') {
+                  if (s[8].unicode() == 'a') {
+                    if (s[9].unicode() == 'c') {
+                      if (s[10].unicode() == 't') {
+                        return T_DOXY_QMLABSTRACT;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 'p') {
+          if (s[4].unicode() == 'r') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 'p') {
+                if (s[7].unicode() == 'e') {
+                  if (s[8].unicode() == 'r') {
+                    if (s[9].unicode() == 't') {
+                      if (s[10].unicode() == 'y') {
+                        return T_DOXY_QMLPROPERTY;
+                      }
                     }
                   }
                 }
@@ -2462,12 +3439,24 @@ static inline int classify11(const QChar *s) {
         if (s[3].unicode() == 'a') {
           if (s[4].unicode() == 't') {
             if (s[5].unicode() == 'e') {
-              if (s[6].unicode() == 's') {
+              if (s[6].unicode() == 'd') {
+                if (s[7].unicode() == 'a') {
+                  if (s[8].unicode() == 'l') {
+                    if (s[9].unicode() == 's') {
+                      if (s[10].unicode() == 'o') {
+                        return T_DOXY_RELATEDALSO;
+                      }
+                    }
+                  }
+                }
+              }
+              else if (s[6].unicode() == 's') {
                 if (s[7].unicode() == 'a') {
                   if (s[8].unicode() == 'l') {
                     if (s[9].unicode() == 's') {
-                      if (s[10].unicode() == 'o')
+                      if (s[10].unicode() == 'o') {
                         return T_DOXY_RELATESALSO;
+                      }
                     }
                   }
                 }
@@ -2488,8 +3477,9 @@ static inline int classify11(const QChar *s) {
                 if (s[7].unicode() == 'l') {
                   if (s[8].unicode() == 'u') {
                     if (s[9].unicode() == 'd') {
-                      if (s[10].unicode() == 'e')
+                      if (s[10].unicode() == 'e') {
                         return T_DOXY_VERBINCLUDE;
+                      }
                     }
                   }
                 }
@@ -2515,8 +3505,9 @@ static inline int classify12(const QChar *s) {
                   if (s[8].unicode() == 'p') {
                     if (s[9].unicode() == 'a') {
                       if (s[10].unicode() == 'g') {
-                        if (s[11].unicode() == 'e')
+                        if (s[11].unicode() == 'e') {
                           return T_DOXY_CONTENTSPAGE;
+                        }
                       }
                     }
                   }
@@ -2539,8 +3530,9 @@ static inline int classify12(const QChar *s) {
                   if (s[8].unicode() == 'o') {
                     if (s[9].unicode() == 'n') {
                       if (s[10].unicode() == 'l') {
-                        if (s[11].unicode() == 'y')
+                        if (s[11].unicode() == 'y') {
                           return T_DOXY_ENDLATEXONLY;
+                        }
                       }
                     }
                   }
@@ -2557,8 +3549,9 @@ static inline int classify12(const QChar *s) {
                   if (s[8].unicode() == 't') {
                     if (s[9].unicode() == 'i') {
                       if (s[10].unicode() == 'o') {
-                        if (s[11].unicode() == 'n')
+                        if (s[11].unicode() == 'n') {
                           return T_DOXY_ENDQUOTATION;
+                        }
                       }
                     }
                   }
@@ -2579,8 +3572,9 @@ static inline int classify12(const QChar *s) {
                   if (s[8].unicode() == 'p') {
                     if (s[9].unicode() == 'a') {
                       if (s[10].unicode() == 'g') {
-                        if (s[11].unicode() == 'e')
+                        if (s[11].unicode() == 'e') {
                           return T_DOXY_EXTERNALPAGE;
+                        }
                       }
                     }
                   }
@@ -2603,8 +3597,9 @@ static inline int classify12(const QChar *s) {
                   if (s[8].unicode() == 'l') {
                     if (s[9].unicode() == 'i') {
                       if (s[10].unicode() == 's') {
-                        if (s[11].unicode() == 't')
+                        if (s[11].unicode() == 't') {
                           return T_DOXY_GENERATELIST;
+                        }
                       }
                     }
                   }
@@ -2627,8 +3622,161 @@ static inline int classify12(const QChar *s) {
                   if (s[8].unicode() == 'f') {
                     if (s[9].unicode() == 'i') {
                       if (s[10].unicode() == 'l') {
-                        if (s[11].unicode() == 'e')
+                        if (s[11].unicode() == 'e') {
                           return T_DOXY_INHEADERFILE;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 's') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 'n') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'i') {
+                  if (s[8].unicode() == 'a') {
+                    if (s[9].unicode() == 't') {
+                      if (s[10].unicode() == 'e') {
+                        if (s[11].unicode() == 's') {
+                          return T_DOXY_INSTANTIATES;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'l') {
+    if (s[1].unicode() == 'a') {
+      if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'x') {
+            if (s[5].unicode() == 'i') {
+              if (s[6].unicode() == 'n') {
+                if (s[7].unicode() == 'c') {
+                  if (s[8].unicode() == 'l') {
+                    if (s[9].unicode() == 'u') {
+                      if (s[10].unicode() == 'd') {
+                        if (s[11].unicode() == 'e') {
+                          return T_DOXY_LATEXINCLUDE;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'n') {
+    if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'n') {
+        if (s[3].unicode() == 'r') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'e') {
+              if (s[6].unicode() == 'n') {
+                if (s[7].unicode() == 't') {
+                  if (s[8].unicode() == 'r') {
+                    if (s[9].unicode() == 'a') {
+                      if (s[10].unicode() == 'n') {
+                        if (s[11].unicode() == 't') {
+                          return T_DOXY_NONREENTRANT;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'p') {
+    if (s[1].unicode() == 'r') {
+      if (s[2].unicode() == 'e') {
+        if (s[3].unicode() == 'v') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 'u') {
+                if (s[7].unicode() == 's') {
+                  if (s[8].unicode() == 'p') {
+                    if (s[9].unicode() == 'a') {
+                      if (s[10].unicode() == 'g') {
+                        if (s[11].unicode() == 'e') {
+                          return T_DOXY_PREVIOUSPAGE;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'q') {
+    if (s[1].unicode() == 'm') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 'b') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 's') {
+              if (s[6].unicode() == 'i') {
+                if (s[7].unicode() == 'c') {
+                  if (s[8].unicode() == 't') {
+                    if (s[9].unicode() == 'y') {
+                      if (s[10].unicode() == 'p') {
+                        if (s[11].unicode() == 'e') {
+                          return T_DOXY_QMLBASICTYPE;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  return T_DOXY_IDENTIFIER;
+}
+
+static inline int classify13(const QChar *s) {
+  if (s[0].unicode() == 'a') {
+    if (s[1].unicode() == 'n') {
+      if (s[2].unicode() == 'n') {
+        if (s[3].unicode() == 'o') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'a') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'e') {
+                  if (s[8].unicode() == 'd') {
+                    if (s[9].unicode() == 'l') {
+                      if (s[10].unicode() == 'i') {
+                        if (s[11].unicode() == 's') {
+                          if (s[12].unicode() == 't') {
+                            return T_DOXY_ANNOTATEDLIST;
+                          }
+                        }
                       }
                     }
                   }
@@ -2640,19 +3788,22 @@ static inline int classify12(const QChar *s) {
       }
     }
   }
-  else if (s[0].unicode() == 'n') {
-    if (s[1].unicode() == 'o') {
-      if (s[2].unicode() == 'n') {
-        if (s[3].unicode() == 'r') {
+  else if (s[0].unicode() == 'e') {
+    if (s[1].unicode() == 'n') {
+      if (s[2].unicode() == 'd') {
+        if (s[3].unicode() == 's') {
           if (s[4].unicode() == 'e') {
-            if (s[5].unicode() == 'e') {
-              if (s[6].unicode() == 'n') {
-                if (s[7].unicode() == 't') {
-                  if (s[8].unicode() == 'r') {
-                    if (s[9].unicode() == 'a') {
-                      if (s[10].unicode() == 'n') {
-                        if (s[11].unicode() == 't')
-                          return T_DOXY_NONREENTRANT;
+            if (s[5].unicode() == 'c') {
+              if (s[6].unicode() == 'r') {
+                if (s[7].unicode() == 'e') {
+                  if (s[8].unicode() == 'f') {
+                    if (s[9].unicode() == 'l') {
+                      if (s[10].unicode() == 'i') {
+                        if (s[11].unicode() == 's') {
+                          if (s[12].unicode() == 't') {
+                            return T_DOXY_ENDSECREFLIST;
+                          }
+                        }
                       }
                     }
                   }
@@ -2664,19 +3815,22 @@ static inline int classify12(const QChar *s) {
       }
     }
   }
-  else if (s[0].unicode() == 'p') {
-    if (s[1].unicode() == 'r') {
-      if (s[2].unicode() == 'e') {
-        if (s[3].unicode() == 'v') {
-          if (s[4].unicode() == 'i') {
-            if (s[5].unicode() == 'o') {
-              if (s[6].unicode() == 'u') {
-                if (s[7].unicode() == 's') {
-                  if (s[8].unicode() == 'p') {
-                    if (s[9].unicode() == 'a') {
-                      if (s[10].unicode() == 'g') {
-                        if (s[11].unicode() == 'e')
-                          return T_DOXY_PREVIOUSPAGE;
+  else if (s[0].unicode() == 'h') {
+    if (s[1].unicode() == 'i') {
+      if (s[2].unicode() == 'd') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'c') {
+            if (s[5].unicode() == 'a') {
+              if (s[6].unicode() == 'l') {
+                if (s[7].unicode() == 'l') {
+                  if (s[8].unicode() == 'g') {
+                    if (s[9].unicode() == 'r') {
+                      if (s[10].unicode() == 'a') {
+                        if (s[11].unicode() == 'p') {
+                          if (s[12].unicode() == 'h') {
+                            return T_DOXY_HIDECALLGRAPH;
+                          }
+                        }
                       }
                     }
                   }
@@ -2688,13 +3842,32 @@ static inline int classify12(const QChar *s) {
       }
     }
   }
-  return T_DOXY_IDENTIFIER;
-}
-
-static inline int classify13(const QChar *s) {
-  if (s[0].unicode() == 'i') {
+  else if (s[0].unicode() == 'i') {
     if (s[1].unicode() == 'n') {
-      if (s[2].unicode() == 'p') {
+      if (s[2].unicode() == 'c') {
+        if (s[3].unicode() == 'l') {
+          if (s[4].unicode() == 'u') {
+            if (s[5].unicode() == 'd') {
+              if (s[6].unicode() == 'e') {
+                if (s[7].unicode() == 'l') {
+                  if (s[8].unicode() == 'i') {
+                    if (s[9].unicode() == 'n') {
+                      if (s[10].unicode() == 'e') {
+                        if (s[11].unicode() == 'n') {
+                          if (s[12].unicode() == 'o') {
+                            return T_DOXY_INCLUDELINENO;
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 'p') {
         if (s[3].unicode() == 'u') {
           if (s[4].unicode() == 'b') {
             if (s[5].unicode() == 'l') {
@@ -2704,8 +3877,9 @@ static inline int classify13(const QChar *s) {
                     if (s[9].unicode() == 'r') {
                       if (s[10].unicode() == 'o') {
                         if (s[11].unicode() == 'u') {
-                          if (s[12].unicode() == 'p')
+                          if (s[12].unicode() == 'p') {
                             return T_DOXY_INPUBLICGROUP;
+                          }
                         }
                       }
                     }
@@ -2730,8 +3904,36 @@ static inline int classify13(const QChar *s) {
                     if (s[9].unicode() == 'p') {
                       if (s[10].unicode() == 'i') {
                         if (s[11].unicode() == 'n') {
-                          if (s[12].unicode() == 'g')
+                          if (s[12].unicode() == 'g') {
                             return T_DOXY_NOSUBGROUPING;
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'p') {
+    if (s[1].unicode() == 'u') {
+      if (s[2].unicode() == 'b') {
+        if (s[3].unicode() == 'l') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'c') {
+              if (s[6].unicode() == 's') {
+                if (s[7].unicode() == 'e') {
+                  if (s[8].unicode() == 'c') {
+                    if (s[9].unicode() == 't') {
+                      if (s[10].unicode() == 'i') {
+                        if (s[11].unicode() == 'o') {
+                          if (s[12].unicode() == 'n') {
+                            return T_DOXY_PUBLICSECTION;
+                          }
                         }
                       }
                     }
@@ -2756,8 +3958,9 @@ static inline int classify13(const QChar *s) {
                     if (s[9].unicode() == 'f') {
                       if (s[10].unicode() == 'i') {
                         if (s[11].unicode() == 'l') {
-                          if (s[12].unicode() == 'e')
+                          if (s[12].unicode() == 'e') {
                             return T_DOXY_QUOTEFROMFILE;
+                          }
                         }
                       }
                     }
@@ -2770,8 +3973,9 @@ static inline int classify13(const QChar *s) {
                     if (s[9].unicode() == 't') {
                       if (s[10].unicode() == 'i') {
                         if (s[11].unicode() == 'o') {
-                          if (s[12].unicode() == 'n')
+                          if (s[12].unicode() == 'n') {
                             return T_DOXY_QUOTEFUNCTION;
+                          }
                         }
                       }
                     }
@@ -2796,8 +4000,71 @@ static inline int classify13(const QChar *s) {
                     if (s[9].unicode() == 't') {
                       if (s[10].unicode() == 'i') {
                         if (s[11].unicode() == 'o') {
-                          if (s[12].unicode() == 'n')
+                          if (s[12].unicode() == 'n') {
                             return T_DOXY_SUBSUBSECTION;
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  return T_DOXY_IDENTIFIER;
+}
+
+static inline int classify14(const QChar *s) {
+  if (s[0].unicode() == 'e') {
+    if (s[1].unicode() == 'n') {
+      if (s[2].unicode() == 'd') {
+        if (s[3].unicode() == 'd') {
+          if (s[4].unicode() == 'o') {
+            if (s[5].unicode() == 'c') {
+              if (s[6].unicode() == 'b') {
+                if (s[7].unicode() == 'o') {
+                  if (s[8].unicode() == 'o') {
+                    if (s[9].unicode() == 'k') {
+                      if (s[10].unicode() == 'o') {
+                        if (s[11].unicode() == 'n') {
+                          if (s[12].unicode() == 'l') {
+                            if (s[13].unicode() == 'y') {
+                              return T_DOXY_ENDDOCBOOKONLY;
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'p') {
+    if (s[1].unicode() == 'r') {
+      if (s[2].unicode() == 'i') {
+        if (s[3].unicode() == 'v') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 't') {
+              if (s[6].unicode() == 'e') {
+                if (s[7].unicode() == 's') {
+                  if (s[8].unicode() == 'e') {
+                    if (s[9].unicode() == 'c') {
+                      if (s[10].unicode() == 't') {
+                        if (s[11].unicode() == 'i') {
+                          if (s[12].unicode() == 'o') {
+                            if (s[13].unicode() == 'n') {
+                              return T_DOXY_PRIVATESECTION;
+                            }
+                          }
                         }
                       }
                     }
@@ -2818,7 +4085,30 @@ static inline int classify15(const QChar *s) {
     if (s[1].unicode() == 'i') {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'e') {
-          if (s[4].unicode() == 'i') {
+          if (s[4].unicode() == 'c') {
+            if (s[5].unicode() == 'a') {
+              if (s[6].unicode() == 'l') {
+                if (s[7].unicode() == 'l') {
+                  if (s[8].unicode() == 'e') {
+                    if (s[9].unicode() == 'r') {
+                      if (s[10].unicode() == 'g') {
+                        if (s[11].unicode() == 'r') {
+                          if (s[12].unicode() == 'a') {
+                            if (s[13].unicode() == 'p') {
+                              if (s[14].unicode() == 'h') {
+                                return T_DOXY_HIDECALLERGRAPH;
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+          else if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 'n') {
               if (s[6].unicode() == 'i') {
                 if (s[7].unicode() == 't') {
@@ -2828,8 +4118,9 @@ static inline int classify15(const QChar *s) {
                         if (s[11].unicode() == 'i') {
                           if (s[12].unicode() == 'z') {
                             if (s[13].unicode() == 'e') {
-                              if (s[14].unicode() == 'r')
+                              if (s[14].unicode() == 'r') {
                                 return T_DOXY_HIDEINITIALIZER;
+                              }
                             }
                           }
                         }
@@ -2858,8 +4149,9 @@ static inline int classify15(const QChar *s) {
                         if (s[11].unicode() == 'i') {
                           if (s[12].unicode() == 'z') {
                             if (s[13].unicode() == 'e') {
-                              if (s[14].unicode() == 'r')
+                              if (s[14].unicode() == 'r') {
                                 return T_DOXY_SHOWINITIALIZER;
+                              }
                             }
                           }
                         }
@@ -2888,8 +4180,128 @@ static inline int classify15(const QChar *s) {
                         if (s[11].unicode() == 'e') {
                           if (s[12].unicode() == 'n') {
                             if (s[13].unicode() == 't') {
-                              if (s[14].unicode() == 's')
+                              if (s[14].unicode() == 's') {
                                 return T_DOXY_TABLEOFCONTENTS;
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  return T_DOXY_IDENTIFIER;
+}
+
+static inline int classify16(const QChar *s) {
+  if (s[0].unicode() == 'p') {
+    if (s[1].unicode() == 'r') {
+      if (s[2].unicode() == 'o') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'c') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'e') {
+                  if (s[8].unicode() == 'd') {
+                    if (s[9].unicode() == 's') {
+                      if (s[10].unicode() == 'e') {
+                        if (s[11].unicode() == 'c') {
+                          if (s[12].unicode() == 't') {
+                            if (s[13].unicode() == 'i') {
+                              if (s[14].unicode() == 'o') {
+                                if (s[15].unicode() == 'n') {
+                                  return T_DOXY_PROTECTEDSECTION;
+                                }
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  return T_DOXY_IDENTIFIER;
+}
+
+static inline int classify17(const QChar *s) {
+  if (s[0].unicode() == 'q') {
+    if (s[1].unicode() == 'm') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 'a') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 't') {
+              if (s[6].unicode() == 'a') {
+                if (s[7].unicode() == 'c') {
+                  if (s[8].unicode() == 'h') {
+                    if (s[9].unicode() == 'e') {
+                      if (s[10].unicode() == 'd') {
+                        if (s[11].unicode() == 's') {
+                          if (s[12].unicode() == 'i') {
+                            if (s[13].unicode() == 'g') {
+                              if (s[14].unicode() == 'n') {
+                                if (s[15].unicode() == 'a') {
+                                  if (s[16].unicode() == 'l') {
+                                    return T_DOXY_QMLATTACHEDSIGNAL;
+                                  }
+                                }
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  return T_DOXY_IDENTIFIER;
+}
+
+static inline int classify19(const QChar *s) {
+  if (s[0].unicode() == 'q') {
+    if (s[1].unicode() == 'm') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 'a') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 't') {
+              if (s[6].unicode() == 'a') {
+                if (s[7].unicode() == 'c') {
+                  if (s[8].unicode() == 'h') {
+                    if (s[9].unicode() == 'e') {
+                      if (s[10].unicode() == 'd') {
+                        if (s[11].unicode() == 'p') {
+                          if (s[12].unicode() == 'r') {
+                            if (s[13].unicode() == 'o') {
+                              if (s[14].unicode() == 'p') {
+                                if (s[15].unicode() == 'e') {
+                                  if (s[16].unicode() == 'r') {
+                                    if (s[17].unicode() == 't') {
+                                      if (s[18].unicode() == 'y') {
+                                        return T_DOXY_QMLATTACHEDPROPERTY;
+                                      }
+                                    }
+                                  }
+                                }
+                              }
                             }
                           }
                         }
@@ -2922,8 +4334,11 @@ int CppTools::classifyDoxygenTag(const QChar *s, int n) {
     case 11: return classify11(s);
     case 12: return classify12(s);
     case 13: return classify13(s);
+    case 14: return classify14(s);
     case 15: return classify15(s);
+    case 16: return classify16(s);
+    case 17: return classify17(s);
+    case 19: return classify19(s);
     default: return T_DOXY_IDENTIFIER;
   } // switch
 }
-
diff --git a/src/plugins/cpptools/cppdoxygen.h b/src/plugins/cpptools/cppdoxygen.h
index 2eb8b001f1caa69c5243910448c2b8a55704c6ad..f1e708bd98ec23f7e32eaaae949e707e7d923540 100644
--- a/src/plugins/cpptools/cppdoxygen.h
+++ b/src/plugins/cpptools/cppdoxygen.h
@@ -33,222 +33,287 @@ namespace CppTools {
 
 enum DoxygenReservedWord {
     T_DOXY_IDENTIFIER,
-    T_DOXY_ARG,
-    T_DOXY_ATTENTION,
-    T_DOXY_AUTHOR,
-    T_DOXY_CALLGRAPH,
-    T_DOXY_CODE,
-    T_DOXY_DOT,
-    T_DOXY_ELSE,
-    T_DOXY_ENDCODE,
-    T_DOXY_ENDCOND,
-    T_DOXY_ENDDOT,
-    T_DOXY_ENDHTMLONLY,
-    T_DOXY_ENDIF,
-    T_DOXY_ENDLATEXONLY,
-    T_DOXY_ENDLINK,
-    T_DOXY_ENDMANONLY,
-    T_DOXY_ENDVERBATIM,
-    T_DOXY_ENDXMLONLY,
-    T_DOXY_HIDEINITIALIZER,
-    T_DOXY_HTMLONLY,
-    T_DOXY_INTERFACE,
-    T_DOXY_INTERNAL,
-    T_DOXY_INVARIANT,
-    T_DOXY_LATEXONLY,
-    T_DOXY_LI,
-    T_DOXY_MANONLY,
-    T_DOXY_N,
-    T_DOXY_NOSUBGROUPING,
-    T_DOXY_NOTE,
-    T_DOXY_ONLY,
-    T_DOXY_POST,
-    T_DOXY_PRE,
-    T_DOXY_REMARKS,
-    T_DOXY_RETURN,
-    T_DOXY_RETURNS,
-    T_DOXY_SA,
-    T_DOXY_SEE,
-    T_DOXY_SHOWINITIALIZER,
-    T_DOXY_SINCE,
-    T_DOXY_TEST,
-    T_DOXY_TODO,
-    T_DOXY_VERBATIM,
-    T_DOXY_WARNING,
-    T_DOXY_XMLONLY,
+
     T_DOXY_A,
+    T_DOXY_ABSTRACT,
+    T_DOXY_ADDINDEX,
     T_DOXY_ADDTOGROUP,
     T_DOXY_ANCHOR,
+    T_DOXY_ANNOTATEDLIST,
+    T_DOXY_ARG,
+    T_DOXY_ATTENTION,
+    T_DOXY_AUTHOR,
+    T_DOXY_AUTHORS,
     T_DOXY_B,
+    T_DOXY_BADCODE,
+    T_DOXY_BASENAME,
+    T_DOXY_BOLD,
+    T_DOXY_BRIEF,
+    T_DOXY_BUG,
     T_DOXY_C,
+    T_DOXY_CALLERGRAPH,
+    T_DOXY_CALLGRAPH,
+    T_DOXY_CAPTION,
+    T_DOXY_CATEGORY,
+    T_DOXY_CHAPTER,
+    T_DOXY_CITE,
     T_DOXY_CLASS,
+    T_DOXY_CODE,
+    T_DOXY_CODELINE,
+    T_DOXY_COMPAT,
     T_DOXY_COND,
+    T_DOXY_CONTENTSPAGE,
+    T_DOXY_COPYBRIEF,
+    T_DOXY_COPYDETAILS,
     T_DOXY_COPYDOC,
+    T_DOXY_COPYRIGHT,
+    T_DOXY_CORELIB,
+    T_DOXY_DATE,
     T_DOXY_DEF,
+    T_DOXY_DEFAULT,
+    T_DOXY_DEFGROUP,
+    T_DOXY_DEPRECATED,
+    T_DOXY_DETAILS,
+    T_DOXY_DIAFILE,
+    T_DOXY_DIR,
+    T_DOXY_DIV,
+    T_DOXY_DOCBOOKONLY,
     T_DOXY_DONTINCLUDE,
+    T_DOXY_DOT,
     T_DOXY_DOTFILE,
+    T_DOXY_DOTS,
     T_DOXY_E,
+    T_DOXY_ELSE,
     T_DOXY_ELSEIF,
     T_DOXY_EM,
-    T_DOXY_ENUM,
-    T_DOXY_EXAMPLE,
-    T_DOXY_EXCEPTION,
-    T_DOXY_EXCEPTIONS,
-    T_DOXY_FILE,
-    T_DOXY_HTMLINCLUDE,
-    T_DOXY_IF,
-    T_DOXY_IFNOT,
-    T_DOXY_INCLUDE,
-    T_DOXY_LINK,
-    T_DOXY_NAMESPACE,
-    T_DOXY_P,
-    T_DOXY_PACKAGE,
-    T_DOXY_REF,
-    T_DOXY_RELATES,
-    T_DOXY_RELATESALSO,
-    T_DOXY_RETVAL,
-    T_DOXY_THROW,
-    T_DOXY_THROWS,
-    T_DOXY_VERBINCLUDE,
-    T_DOXY_VERSION,
-    T_DOXY_XREFITEM,
-    T_DOXY_PARAM,
-    T_DOXY_IMAGE,
-    T_DOXY_DEFGROUP,
-    T_DOXY_PAGE,
-    T_DOXY_PARAGRAPH,
-    T_DOXY_SECTION,
-    T_DOXY_STRUCT,
-    T_DOXY_SUBSECTION,
-    T_DOXY_SUBSUBSECTION,
-    T_DOXY_UNION,
-    T_DOXY_WEAKGROUP,
-    T_DOXY_ADDINDEX,
-    T_DOXY_BRIEF,
-    T_DOXY_BUG,
-    T_DOXY_DATE,
-    T_DOXY_DEPRECATED,
-    T_DOXY_FN,
-    T_DOXY_INGROUP,
-    T_DOXY_LINE,
-    T_DOXY_MAINPAGE,
-    T_DOXY_NAME,
-    T_DOXY_OVERLOAD,
-    T_DOXY_PAR,
-    T_DOXY_SHORT,
-    T_DOXY_SKIP,
-    T_DOXY_SKIPLINE,
-    T_DOXY_TYPEDEF,
-    T_DOXY_UNTIL,
-    T_DOXY_VAR,
-
-    T_FIRST_QDOC_TAG,
-
-    T_DOXY_ABSTRACT = T_FIRST_QDOC_TAG,
-    T_DOXY_BADCODE,
-    T_DOXY_BASENAME,
-    T_DOXY_BOLD,
-    T_DOXY_CAPTION,
-    T_DOXY_CHAPTER,
-    T_DOXY_CODELINE,
-    T_DOXY_DOTS,
     T_DOXY_ENDABSTRACT,
     T_DOXY_ENDCHAPTER,
+    T_DOXY_ENDCODE,
+    T_DOXY_ENDCOND,
+    T_DOXY_ENDDOCBOOKONLY,
+    T_DOXY_ENDDOT,
     T_DOXY_ENDFOOTNOTE,
+    T_DOXY_ENDHTMLONLY,
+    T_DOXY_ENDIF,
+    T_DOXY_ENDINTERNAL,
+    T_DOXY_ENDLATEXONLY,
     T_DOXY_ENDLEGALESE,
+    T_DOXY_ENDLINK,
     T_DOXY_ENDLIST,
+    T_DOXY_ENDMANONLY,
+    T_DOXY_ENDMSC,
     T_DOXY_ENDOMIT,
+    T_DOXY_ENDPARBLOCK,
     T_DOXY_ENDPART,
     T_DOXY_ENDQUOTATION,
     T_DOXY_ENDRAW,
+    T_DOXY_ENDRTFONLY,
+    T_DOXY_ENDSECREFLIST,
     T_DOXY_ENDSECTION1,
     T_DOXY_ENDSECTION2,
     T_DOXY_ENDSECTION3,
     T_DOXY_ENDSECTION4,
     T_DOXY_ENDSIDEBAR,
     T_DOXY_ENDTABLE,
+    T_DOXY_ENDUML,
+    T_DOXY_ENDVERBATIM,
+    T_DOXY_ENDXMLONLY,
+    T_DOXY_ENUM,
+    T_DOXY_EXAMPLE,
+    T_DOXY_EXCEPTION,
+    T_DOXY_EXCEPTIONS,
     T_DOXY_EXPIRE,
+    T_DOXY_EXTENDS,
+    T_DOXY_EXTERNALPAGE,
+    T_DOXY_FILE,
+    T_DOXY_FN,
     T_DOXY_FOOTNOTE,
     T_DOXY_GENERATELIST,
     T_DOXY_GRANULARITY,
+    T_DOXY_GROUP,
+    T_DOXY_GUI,
     T_DOXY_HEADER,
+    T_DOXY_HEADERFILE,
+    T_DOXY_HIDECALLERGRAPH,
+    T_DOXY_HIDECALLGRAPH,
+    T_DOXY_HIDEINITIALIZER,
+    T_DOXY_HTMLINCLUDE,
+    T_DOXY_HTMLONLY,
     T_DOXY_I,
+    T_DOXY_IDLEXCEPT,
+    T_DOXY_IF,
+    T_DOXY_IFNOT,
+    T_DOXY_IMAGE,
+    T_DOXY_IMPLEMENTS,
+    T_DOXY_INCLUDE,
+    T_DOXY_INCLUDELINENO,
     T_DOXY_INDEX,
+    T_DOXY_INDEXPAGE,
+    T_DOXY_INGROUP,
+    T_DOXY_INHEADERFILE,
+    T_DOXY_INHERITS,
     T_DOXY_INLINEIMAGE,
+    T_DOXY_INMODULE,
+    T_DOXY_INPUBLICGROUP,
+    T_DOXY_INQMLMODULE,
+    T_DOXY_INSTANTIATES,
+    T_DOXY_INTERFACE,
+    T_DOXY_INTERNAL,
+    T_DOXY_INVARIANT,
     T_DOXY_KEYWORD,
     T_DOXY_L,
+    T_DOXY_LATEXINCLUDE,
+    T_DOXY_LATEXONLY,
     T_DOXY_LEGALESE,
+    T_DOXY_LI,
+    T_DOXY_LINE,
+    T_DOXY_LINK,
     T_DOXY_LIST,
+    T_DOXY_MACRO,
+    T_DOXY_MAINCLASS,
+    T_DOXY_MAINPAGE,
+    T_DOXY_MANONLY,
+    T_DOXY_MEMBEROF,
     T_DOXY_META,
+    T_DOXY_MODULE,
+    T_DOXY_MSC,
+    T_DOXY_MSCFILE,
+    T_DOXY_N,
+    T_DOXY_NAME,
+    T_DOXY_NAMESPACE,
+    T_DOXY_NETWORK,
     T_DOXY_NEWCODE,
+    T_DOXY_NEXTPAGE,
+    T_DOXY_NOAUTOLIST,
+    T_DOXY_NONREENTRANT,
+    T_DOXY_NOSUBGROUPING,
+    T_DOXY_NOTE,
     T_DOXY_O,
+    T_DOXY_OBSOLETE,
     T_DOXY_OLDCODE,
     T_DOXY_OMIT,
     T_DOXY_OMITVALUE,
+    T_DOXY_ONLY,
+    T_DOXY_OPENGL,
+    T_DOXY_OVERLOAD,
+    T_DOXY_P,
+    T_DOXY_PACKAGE,
+    T_DOXY_PAGE,
+    T_DOXY_PAR,
+    T_DOXY_PARAGRAPH,
+    T_DOXY_PARAM,
+    T_DOXY_PARBLOCK,
     T_DOXY_PART,
+    T_DOXY_POST,
+    T_DOXY_PRE,
+    T_DOXY_PRELIMINARY,
+    T_DOXY_PREVIOUSPAGE,
     T_DOXY_PRINTLINE,
     T_DOXY_PRINTTO,
     T_DOXY_PRINTUNTIL,
+    T_DOXY_PRIVATE,
+    T_DOXY_PRIVATESECTION,
+    T_DOXY_PROPERTY,
+    T_DOXY_PROTECTED,
+    T_DOXY_PROTECTEDSECTION,
+    T_DOXY_PROTOCOL,
+    T_DOXY_PUBLIC,
+    T_DOXY_PUBLICSECTION,
+    T_DOXY_PURE,
+    T_DOXY_QMLABSTRACT,
+    T_DOXY_QMLATTACHEDPROPERTY,
+    T_DOXY_QMLATTACHEDSIGNAL,
+    T_DOXY_QMLBASICTYPE,
+    T_DOXY_QMLCLASS,
+    T_DOXY_QMLMETHOD,
+    T_DOXY_QMLMODULE,
+    T_DOXY_QMLPROPERTY,
+    T_DOXY_QMLSIGNAL,
+    T_DOXY_QMLTYPE,
+    T_DOXY_QT3SUPPORT,
+    T_DOXY_QTESTLIB,
     T_DOXY_QUOTATION,
     T_DOXY_QUOTEFILE,
     T_DOXY_QUOTEFROMFILE,
     T_DOXY_QUOTEFUNCTION,
     T_DOXY_RAW,
+    T_DOXY_REENTRANT,
+    T_DOXY_REF,
+    T_DOXY_REFITEM,
+    T_DOXY_REIMP,
+    T_DOXY_RELATED,
+    T_DOXY_RELATEDALSO,
+    T_DOXY_RELATES,
+    T_DOXY_RELATESALSO,
+    T_DOXY_REMARK,
+    T_DOXY_REMARKS,
+    T_DOXY_RESULT,
+    T_DOXY_RETURN,
+    T_DOXY_RETURNS,
+    T_DOXY_RETVAL,
     T_DOXY_ROW,
+    T_DOXY_RTFONLY,
+    T_DOXY_SA,
+    T_DOXY_SECREFLIST,
+    T_DOXY_SECTION,
     T_DOXY_SECTION1,
     T_DOXY_SECTION2,
     T_DOXY_SECTION3,
     T_DOXY_SECTION4,
+    T_DOXY_SEE,
+    T_DOXY_SERVICE,
+    T_DOXY_SHORT,
+    T_DOXY_SHOWINITIALIZER,
     T_DOXY_SIDEBAR,
+    T_DOXY_SINCE,
+    T_DOXY_SKIP,
+    T_DOXY_SKIPLINE,
     T_DOXY_SKIPTO,
     T_DOXY_SKIPUNTIL,
     T_DOXY_SNIPPET,
+    T_DOXY_SPAN,
+    T_DOXY_SQL,
+    T_DOXY_STARTPAGE,
+    T_DOXY_STARTUML,
+    T_DOXY_STRUCT,
     T_DOXY_SUB,
+    T_DOXY_SUBPAGE,
+    T_DOXY_SUBSECTION,
+    T_DOXY_SUBSUBSECTION,
+    T_DOXY_SUBTITLE,
     T_DOXY_SUP,
+    T_DOXY_SVG,
     T_DOXY_TABLE,
     T_DOXY_TABLEOFCONTENTS,
     T_DOXY_TARGET,
+    T_DOXY_TEST,
+    T_DOXY_THREADSAFE,
+    T_DOXY_THROW,
+    T_DOXY_THROWS,
+    T_DOXY_TITLE,
+    T_DOXY_TODO,
+    T_DOXY_TPARAM,
     T_DOXY_TT,
+    T_DOXY_TYPEDEF,
+    T_DOXY_UICONTROL,
+    T_DOXY_UITOOLS,
     T_DOXY_UNDERLINE,
     T_DOXY_UNICODE,
+    T_DOXY_UNION,
+    T_DOXY_UNTIL,
     T_DOXY_VALUE,
-    T_DOXY_CONTENTSPAGE,
-    T_DOXY_EXTERNALPAGE,
-    T_DOXY_GROUP,
-    T_DOXY_HEADERFILE,
-    T_DOXY_INDEXPAGE,
-    T_DOXY_INHEADERFILE,
-    T_DOXY_MACRO,
-    T_DOXY_MODULE,
-    T_DOXY_NEXTPAGE,
-    T_DOXY_PREVIOUSPAGE,
-    T_DOXY_PROPERTY,
-    T_DOXY_REIMP,
-    T_DOXY_SERVICE,
-    T_DOXY_STARTPAGE,
+    T_DOXY_VAR,
     T_DOXY_VARIABLE,
-    T_DOXY_COMPAT,
-    T_DOXY_INMODULE,
-    T_DOXY_MAINCLASS,
-    T_DOXY_NONREENTRANT,
-    T_DOXY_OBSOLETE,
-    T_DOXY_PRELIMINARY,
-    T_DOXY_INPUBLICGROUP,
-    T_DOXY_REENTRANT,
-    T_DOXY_SUBTITLE,
-    T_DOXY_THREADSAFE,
-    T_DOXY_TITLE,
-    T_DOXY_CORELIB,
-    T_DOXY_UITOOLS,
-    T_DOXY_GUI,
-    T_DOXY_NETWORK,
-    T_DOXY_OPENGL,
-    T_DOXY_QT3SUPPORT,
-    T_DOXY_SVG,
-    T_DOXY_SQL,
-    T_DOXY_QTESTLIB,
+    T_DOXY_VERBATIM,
+    T_DOXY_VERBINCLUDE,
+    T_DOXY_VERSION,
+    T_DOXY_VHDLFLOW,
+    T_DOXY_WARNING,
+    T_DOXY_WEAKGROUP,
     T_DOXY_WEBKIT,
     T_DOXY_XML,
+    T_DOXY_XMLONLY,
+    T_DOXY_XREFITEM,
 
     T_DOXY_LAST_TAG
 };
diff --git a/src/plugins/cpptools/cppdoxygen.kwgen b/src/plugins/cpptools/cppdoxygen.kwgen
new file mode 100644
index 0000000000000000000000000000000000000000..bb8995f110f75252387d73314570bf5264ed5a7a
--- /dev/null
+++ b/src/plugins/cpptools/cppdoxygen.kwgen
@@ -0,0 +1,286 @@
+%token-prefix=T_DOXY_
+%toupper
+%char-type=QChar
+%unicode-function=.unicode()
+
+%%
+a
+abstract
+addindex
+addtogroup
+anchor
+annotatedlist
+arg
+attention
+author
+authors
+b
+badcode
+basename
+bold
+brief
+bug
+c
+callergraph
+callgraph
+caption
+category
+chapter
+cite
+class
+code
+codeline
+compat
+cond
+contentspage
+copybrief
+copydetails
+copydoc
+copyright
+corelib
+date
+def
+default
+defgroup
+deprecated
+details
+diafile
+dir
+div
+docbookonly
+dontinclude
+dot
+dotfile
+dots
+e
+else
+elseif
+em
+endabstract
+endchapter
+endcode
+endcond
+enddocbookonly
+enddot
+endfootnote
+endhtmlonly
+endif
+endinternal
+endlatexonly
+endlegalese
+endlink
+endlist
+endmanonly
+endmsc
+endomit
+endparblock
+endpart
+endquotation
+endraw
+endrtfonly
+endsecreflist
+endsection1
+endsection2
+endsection3
+endsection4
+endsidebar
+endtable
+enduml
+endverbatim
+endxmlonly
+enum
+example
+exception
+exceptions
+expire
+extends
+externalpage
+file
+fn
+footnote
+generatelist
+granularity
+group
+gui
+header
+headerfile
+hidecallergraph
+hidecallgraph
+hideinitializer
+htmlinclude
+htmlonly
+i
+idlexcept
+if
+ifnot
+image
+implements
+include
+includelineno
+index
+indexpage
+ingroup
+inheaderfile
+inherits
+inlineimage
+inmodule
+inpublicgroup
+inqmlmodule
+instantiates
+interface
+internal
+invariant
+keyword
+l
+latexinclude
+latexonly
+legalese
+li
+line
+link
+list
+macro
+mainclass
+mainpage
+manonly
+memberof
+meta
+module
+msc
+mscfile
+n
+name
+namespace
+network
+newcode
+nextpage
+noautolist
+nonreentrant
+nosubgrouping
+note
+o
+obsolete
+oldcode
+omit
+omitvalue
+only
+opengl
+overload
+p
+package
+page
+par
+paragraph
+param
+parblock
+part
+post
+pre
+preliminary
+previouspage
+printline
+printto
+printuntil
+private
+privatesection
+property
+protected
+protectedsection
+protocol
+public
+publicsection
+pure
+qmlabstract
+qmlattachedproperty
+qmlattachedsignal
+qmlbasictype
+qmlclass
+qmlmethod
+qmlmodule
+qmlproperty
+qmlsignal
+qmltype
+qt3support
+qtestlib
+quotation
+quotefile
+quotefromfile
+quotefunction
+raw
+reentrant
+ref
+refitem
+reimp
+related
+relatedalso
+relates
+relatesalso
+remark
+remarks
+result
+return
+returns
+retval
+row
+rtfonly
+sa
+secreflist
+section
+section1
+section2
+section3
+section4
+see
+service
+short
+showinitializer
+sidebar
+since
+skip
+skipline
+skipto
+skipuntil
+snippet
+span
+sql
+startpage
+startuml
+struct
+sub
+subpage
+subsection
+subsubsection
+subtitle
+sup
+svg
+table
+tableofcontents
+target
+test
+threadsafe
+throw
+throws
+title
+todo
+tparam
+tt
+typedef
+uicontrol
+uitools
+underline
+unicode
+union
+until
+value
+var
+variable
+verbatim
+verbinclude
+version
+vhdlflow
+warning
+weakgroup
+webkit
+xml
+xmlonly
+xrefitem
diff --git a/src/plugins/cpptools/cpplocalsymbols_test.cpp b/src/plugins/cpptools/cpplocalsymbols_test.cpp
index 7fb8a921e20a9ad3e7a19fba361b7c47d553a74e..9183c9bfcdd6821ad72bd711407f248fbb6e66ba 100644
--- a/src/plugins/cpptools/cpplocalsymbols_test.cpp
+++ b/src/plugins/cpptools/cpplocalsymbols_test.cpp
@@ -115,7 +115,6 @@ struct Result
 } // anonymous namespace
 
 Q_DECLARE_METATYPE(Result)
-Q_DECLARE_METATYPE(QList<Result>)
 
 QT_BEGIN_NAMESPACE
 namespace QTest {
diff --git a/src/plugins/cpptools/cpplocatorfilter_test.cpp b/src/plugins/cpptools/cpplocatorfilter_test.cpp
index b9b08f3d54790ae584db87278b1b42a549423b86..27258855d80e558e890c8d0e94a24cab4564b1ab 100644
--- a/src/plugins/cpptools/cpplocatorfilter_test.cpp
+++ b/src/plugins/cpptools/cpplocatorfilter_test.cpp
@@ -48,8 +48,6 @@ using namespace CppTools::Internal;
 using namespace ExtensionSystem;
 using namespace Utils;
 
-Q_DECLARE_METATYPE(ILocatorFilter *)
-
 namespace {
 
 enum { debug = 0 };
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index cdf5922e424e61c6a7a0c43211ddcc37e99395b3..13b582cfed05ea475ba38df52bf38aaa5982b4eb 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -67,8 +67,6 @@
 #include <sstream>
 #endif
 
-Q_DECLARE_METATYPE(QSet<QString>)
-
 static const bool DumpProjectInfo = qgetenv("QTC_DUMP_PROJECT_INFO") == "1";
 
 using namespace CppTools;
diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp
index 230422163101ec9dc24e827cfb8304dd86ad4bf0..92bbebf91daa6104eeb475034c123710f203a470 100644
--- a/src/plugins/cpptools/cppmodelmanager_test.cpp
+++ b/src/plugins/cpptools/cppmodelmanager_test.cpp
@@ -57,7 +57,7 @@ using namespace ProjectExplorer;
 
 typedef CPlusPlus::Document Document;
 
-Q_DECLARE_METATYPE(QVector<ProjectFile>)
+Q_DECLARE_METATYPE(ProjectFile)
 
 namespace {
 
diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h
index c26df354f4e70d9f047323338073cc86afd5d2d5..b4d55b9927a948aa33b599be54c7d8234ba49f17 100644
--- a/src/plugins/cpptools/cpptoolsplugin.h
+++ b/src/plugins/cpptools/cpptoolsplugin.h
@@ -108,6 +108,9 @@ private slots:
     void test_global_completion_data();
     void test_global_completion();
 
+    void test_doxygen_tag_completion_data();
+    void test_doxygen_tag_completion();
+
     void test_completion_member_access_operator_data();
     void test_completion_member_access_operator();
 
diff --git a/src/plugins/cpptools/functionutils.cpp b/src/plugins/cpptools/functionutils.cpp
index dd26c80f25dbdc508f82ac308586dbd444326ca4..b8224923a068381f87a7cd495901eaeecc368234 100644
--- a/src/plugins/cpptools/functionutils.cpp
+++ b/src/plugins/cpptools/functionutils.cpp
@@ -175,8 +175,6 @@ typedef QList<Virtuality> VirtualityList;
 } // CppTools namespace
 
 Q_DECLARE_METATYPE(CppTools::Internal::Virtuality)
-Q_DECLARE_METATYPE(CppTools::Internal::VirtualityList)
-Q_DECLARE_METATYPE(QList<int>)
 
 namespace CppTools {
 namespace Internal {
diff --git a/src/plugins/cpptools/modelmanagertesthelper.cpp b/src/plugins/cpptools/modelmanagertesthelper.cpp
index 38573fcf07e7c0f8cf8ec033efe2dc72187322c1..f347cd81af4948fc678c937ecd19d16a49ea6d01 100644
--- a/src/plugins/cpptools/modelmanagertesthelper.cpp
+++ b/src/plugins/cpptools/modelmanagertesthelper.cpp
@@ -33,8 +33,6 @@
 
 #include <cassert>
 
-Q_DECLARE_METATYPE(QSet<QString>)
-
 using namespace CppTools::Internal;
 using namespace CppTools::Tests;
 
diff --git a/src/plugins/cpptools/symbolsearcher_test.cpp b/src/plugins/cpptools/symbolsearcher_test.cpp
index 1eae1a9b9a7445c80d41c8475c83715c04173aa9..dc71fa1562c8d8038182c1d1ccb1b8fc8d222782 100644
--- a/src/plugins/cpptools/symbolsearcher_test.cpp
+++ b/src/plugins/cpptools/symbolsearcher_test.cpp
@@ -126,7 +126,6 @@ private:
 } // anonymous namespace
 
 Q_DECLARE_METATYPE(ResultData)
-Q_DECLARE_METATYPE(ResultDataList)
 
 QT_BEGIN_NAMESPACE
 namespace QTest {
diff --git a/src/plugins/debugger/console/console.cpp b/src/plugins/debugger/console/console.cpp
index 25bed9768bfadbdc8bce5c67e3ece82a6c859ae3..3ea294ef3e5dd1b9c382f65e5bb5a8b7e885e37c 100644
--- a/src/plugins/debugger/console/console.cpp
+++ b/src/plugins/debugger/console/console.cpp
@@ -57,7 +57,7 @@ namespace Internal {
 
 Console::Console()
 {
-    m_consoleItemModel = new ConsoleItemModel;
+    m_consoleItemModel = new ConsoleItemModel(this);
 
     m_consoleWidget = new QWidget;
     m_consoleWidget->setWindowTitle(displayName());
diff --git a/src/plugins/debugger/debugger.qrc b/src/plugins/debugger/debugger.qrc
index 00d902ea0d969446407ee91b207da5d31985af6b..cea824430d2349b1e62153c5e0d43deb1570d8d6 100644
--- a/src/plugins/debugger/debugger.qrc
+++ b/src/plugins/debugger/debugger.qrc
@@ -6,6 +6,12 @@
         <file>images/debugger_continue@2x.png</file>
         <file>images/debugger_continue_mask.png</file>
         <file>images/debugger_continue_mask@2x.png</file>
+        <file>images/stop_overlay_small.png</file>
+        <file>images/stop_overlay_small@2x.png</file>
+        <file>images/interrupt_overlay_small.png</file>
+        <file>images/interrupt_overlay_small@2x.png</file>
+        <file>images/continue_overlay_small.png</file>
+        <file>images/continue_overlay_small@2x.png</file>
         <file>images/debugger_empty_14.png</file>
         <file>images/debugger_interrupt.png</file>
         <file>images/debugger_interrupt@2x.png</file>
diff --git a/src/plugins/debugger/debuggericons.h b/src/plugins/debugger/debuggericons.h
index 10c77df10f1571ec1f7e8b4c94e01c645dd60dca..fd2d1837c4be72cdf229e3acfe2f7a203c18baaa 100644
--- a/src/plugins/debugger/debuggericons.h
+++ b/src/plugins/debugger/debuggericons.h
@@ -47,11 +47,20 @@ const Utils::Icon CONTINUE(
 const Utils::Icon CONTINUE_FLAT({
         {QLatin1String(":/projectexplorer/images/debugger_beetle_mask.png"), Utils::Theme::IconsDebugColor},
         {QLatin1String(":/debugger/images/debugger_continue_mask.png"), Utils::Theme::IconsRunColor}});
+const Utils::Icon DEBUG_CONTINUE_SMALL({
+        {QLatin1String(":/projectexplorer/images/debugger_overlay_small.png"), Utils::Theme::IconsDebugColor},
+        {QLatin1String(":/debugger/images/continue_overlay_small.png"), Utils::Theme::IconsRunColor}});
 const Utils::Icon INTERRUPT(
         QLatin1String(":/debugger/images/debugger_interrupt.png"));
 const Utils::Icon INTERRUPT_FLAT({
         {QLatin1String(":/projectexplorer/images/debugger_beetle_mask.png"), Utils::Theme::IconsDebugColor},
         {QLatin1String(":/debugger/images/debugger_interrupt_mask.png"), Utils::Theme::IconsInterruptColor}});
+const Utils::Icon DEBUG_INTERRUPT_SMALL({
+        {QLatin1String(":/projectexplorer/images/debugger_overlay_small.png"), Utils::Theme::IconsDebugColor},
+        {QLatin1String(":/debugger/images/interrupt_overlay_small.png"), Utils::Theme::IconsInterruptColor}});
+const Utils::Icon DEBUG_EXIT_SMALL({
+        {QLatin1String(":/projectexplorer/images/debugger_overlay_small.png"), Utils::Theme::IconsDebugColor},
+        {QLatin1String(":/debugger/images/stop_overlay_small.png"), Utils::Theme::IconsStopColor}});
 const Utils::Icon LOCATION(
         QLatin1String(":/debugger/images/location_16.png"));
 const Utils::Icon SNAPSHOT(
diff --git a/src/plugins/debugger/debuggermainwindow.cpp b/src/plugins/debugger/debuggermainwindow.cpp
index 54390d844d1e9866fdff131d857b5b0ea3989818..ea9ed897c2b6cbb5d337442a505fff41f52d66bd 100644
--- a/src/plugins/debugger/debuggermainwindow.cpp
+++ b/src/plugins/debugger/debuggermainwindow.cpp
@@ -79,11 +79,24 @@ DebuggerMainWindow::DebuggerMainWindow()
 
 DebuggerMainWindow::~DebuggerMainWindow()
 {
-    // as we have to setParent(0) on dock widget that are not selected,
-    // we keep track of all and make sure we don't leak any
-    foreach (const DockPtr &ptr, m_dockWidgets) {
-        if (ptr)
-            delete ptr.data();
+    // We keep track of widgets for operations that haven't been activated, yet, and make sure we
+    // don't leak any.
+    foreach (const Perspective &perspective, m_perspectiveForPerspectiveId) {
+        foreach (const Perspective::Operation &operation, perspective.operations()) {
+            if (operation.widget) {
+                // There are two possible states: Either addDockForWidget(widget) has
+                // been called on an operation.widget (e.g. when the perspective gets
+                // activated for the first time), or not. In the first case we don't
+                // have to explicitly delete it as we have called setParent(this) on
+                // it. In the second case, if the widget didn't have a parent before,
+                // we have to delete it.
+                if (!operation.widget->parentWidget()) {
+                    // These are from perspectives that were never activated and didn't
+                    // have a parent to begin with.
+                    delete operation.widget;
+                }
+            }
+        }
     }
 }
 
@@ -119,11 +132,6 @@ QDockWidget *DebuggerMainWindow::dockWidget(const QByteArray &dockId) const
     return m_dockForDockId.value(dockId);
 }
 
-QWidget *DebuggerMainWindow::modeWindow()
-{
-    return m_modeWindow;
-}
-
 void DebuggerMainWindow::resetCurrentPerspective()
 {
     loadPerspectiveHelper(m_currentPerspectiveId, false);
@@ -140,7 +148,7 @@ void DebuggerMainWindow::restorePerspective(const QByteArray &perspectiveId)
         m_perspectiveChooser->setCurrentIndex(index);
 }
 
-void DebuggerMainWindow::finalizeSetup(Core::IMode *mode, QWidget *central)
+void DebuggerMainWindow::finalizeSetup()
 {
     auto viewButton = new QToolButton;
     viewButton->setText(tr("Views"));
@@ -195,7 +203,10 @@ void DebuggerMainWindow::finalizeSetup(Core::IMode *mode, QWidget *central)
     m_toolbarDock = dock;
 
     addDockWidget(Qt::BottomDockWidgetArea, dock);
+}
 
+QWidget *createModeWindow(Core::IMode *mode, DebuggerMainWindow *mainWindow, QWidget *central)
+{
     if (!central)
         central = new EditorManagerPlaceHolder(mode);
 
@@ -225,7 +236,7 @@ void DebuggerMainWindow::finalizeSetup(Core::IMode *mode, QWidget *central)
 
     // Right-side window with editor, output etc.
     auto mainWindowSplitter = new MiniSplitter;
-    mainWindowSplitter->addWidget(this);
+    mainWindowSplitter->addWidget(mainWindow);
     mainWindowSplitter->addWidget(new OutputPanePlaceHolder(mode, mainWindowSplitter));
     auto outputPane = new OutputPanePlaceHolder(mode, mainWindowSplitter);
     outputPane->setObjectName(QLatin1String("DebuggerOutputPanePlaceHolder"));
@@ -242,9 +253,9 @@ void DebuggerMainWindow::finalizeSetup(Core::IMode *mode, QWidget *central)
     splitter->setStretchFactor(0, 0);
     splitter->setStretchFactor(1, 1);
     splitter->setObjectName(QLatin1String("DebugModeWidget"));
-    setCentralWidget(centralEditorWidget);
+    mainWindow->setCentralWidget(centralEditorWidget);
 
-    m_modeWindow  = splitter;
+    return splitter;
 }
 
 void DebuggerMainWindow::loadPerspectiveHelper(const QByteArray &perspectiveId, bool fromStoredSettings)
@@ -254,10 +265,10 @@ void DebuggerMainWindow::loadPerspectiveHelper(const QByteArray &perspectiveId,
         saveCurrentPerspective();
         foreach (QDockWidget *dockWidget, m_dockForDockId) {
             QTC_ASSERT(dockWidget, continue);
+            dockWidget->setFloating(false);
+            dockWidget->setParent(this);
             removeDockWidget(dockWidget);
             dockWidget->hide();
-            // Prevent saveState storing the data of the wrong children.
-            dockWidget->setParent(0);
         }
 
         ICore::removeAdditionalContext(Context(Id::fromName(m_currentPerspectiveId)));
@@ -350,8 +361,7 @@ QDockWidget *DebuggerMainWindow::registerDockWidget(const QByteArray &dockId, QW
 {
     QTC_ASSERT(!widget->objectName().isEmpty(), return 0);
     QDockWidget *dockWidget = addDockForWidget(widget);
-    dockWidget->setParent(0);
-    m_dockWidgets.append(DebuggerMainWindow::DockPtr(dockWidget));
+    dockWidget->setParent(this);
     m_dockForDockId[dockId] = dockWidget;
     return dockWidget;
 }
diff --git a/src/plugins/debugger/debuggermainwindow.h b/src/plugins/debugger/debuggermainwindow.h
index c52870cf38428fe15e28d5091c02c708570cc1e2..5f0bc39a7ad9dbd37c1e07db6d3350bc65bfe969 100644
--- a/src/plugins/debugger/debuggermainwindow.h
+++ b/src/plugins/debugger/debuggermainwindow.h
@@ -60,7 +60,7 @@ public:
                   Qt::DockWidgetArea area = Qt::BottomDockWidgetArea);
 
         QByteArray dockId;
-        QWidget *widget = 0;
+        QPointer<QWidget> widget;
         QByteArray anchorDockId;
         OperationType operationType;
         bool visibleByDefault;
@@ -114,14 +114,12 @@ public:
     void resetCurrentPerspective();
     void restorePerspective(const QByteArray &perspectiveId);
 
-    void finalizeSetup(Core::IMode *mode, QWidget *central = 0);
+    void finalizeSetup();
 
     void showStatusMessage(const QString &message, int timeoutMS);
     QDockWidget *dockWidget(const QByteArray &dockId) const;
     QByteArray currentPerspective() const { return m_currentPerspectiveId; }
 
-    QWidget *modeWindow();
-
 private:
     QDockWidget *registerDockWidget(const QByteArray &dockId, QWidget *widget);
     void loadPerspectiveHelper(const QByteArray &perspectiveId, bool fromStoredSettings = true);
@@ -135,12 +133,8 @@ private:
     QHash<QByteArray, QDockWidget *> m_dockForDockId;
     QHash<QByteArray, QWidget *> m_toolbarForPerspectiveId;
     QHash<QByteArray, Perspective> m_perspectiveForPerspectiveId;
-
-    // list of dock widgets to prevent memory leak
-    typedef QPointer<QDockWidget> DockPtr;
-    QList<DockPtr> m_dockWidgets;
-
-    QWidget *m_modeWindow = 0;
 };
 
+QWidget *createModeWindow(Core::IMode *mode, DebuggerMainWindow *mainWindow, QWidget *central);
+
 } // Utils
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 466912b119f4c179b1ac268e21716dafe3ab764b..da9e4a6d862ab934d0317723058b7cc307e1d07c 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -486,41 +486,27 @@ bool DummyEngine::hasCapability(unsigned cap) const
 class DebugModeContext : public IContext
 {
 public:
-    DebugModeContext(DebuggerMainWindow *mainWindow) : m_mainWindow(mainWindow)
+    DebugModeContext(QWidget *modeWindow)
     {
         setContext(Context(CC::C_EDITORMANAGER));
+        setWidget(modeWindow);
         ICore::addContextObject(this);
     }
-
-    QWidget *widget() const override { return m_mainWindow->modeWindow(); }
-
-    DebuggerMainWindow *m_mainWindow;
 };
 
 class DebugMode : public IMode
 {
 public:
-    DebugMode(DebuggerMainWindow *mainWindow) : m_mainWindow(mainWindow)
+    DebugMode()
     {
         setObjectName(QLatin1String("DebugMode"));
         setContext(Context(C_DEBUGMODE, CC::C_NAVIGATION_PANE));
         setDisplayName(DebuggerPlugin::tr("Debug"));
         setIcon(Utils::Icon::modeIcon(Icons::MODE_DEBUGGER_CLASSIC,
                                       Icons::MODE_DEBUGGER_FLAT, Icons::MODE_DEBUGGER_FLAT_ACTIVE));
-//        setIcon(Utils::Icon::modeIcon(Icons::MODE_ANALYZE_CLASSIC,
-//                                      Icons::MODE_ANALYZE_FLAT, Icons::MODE_ANALYZE_FLAT_ACTIVE));
         setPriority(85);
         setId(MODE_DEBUG);
     }
-
-    QWidget *widget() const override { return m_mainWindow->modeWindow(); }
-
-    ~DebugMode()
-    {
-//        delete m_widget;
-    }
-
-    DebuggerMainWindow *m_mainWindow;
 };
 
 ///////////////////////////////////////////////////////////////////////
@@ -924,7 +910,9 @@ public:
     void updateActiveLanguages();
 
 public:
-    DebuggerMainWindow *m_mainWindow = 0;
+    QPointer<DebuggerMainWindow> m_mainWindow;
+    QPointer<QWidget> m_modeWindow;
+    QPointer<DebugMode> m_mode;
 
     QHash<Id, ActionDescription> m_descriptions;
     ActionContainer *m_menu = 0;
@@ -1051,11 +1039,6 @@ DebuggerPluginPrivate::~DebuggerPluginPrivate()
 
     delete m_breakHandler;
     m_breakHandler = 0;
-
-//    delete m_debugMode;
-//    m_debugMode = 0;
-    delete m_mainWindow;
-    m_mainWindow = 0;
 }
 
 DebuggerEngine *DebuggerPluginPrivate::dummyEngine()
@@ -1073,6 +1056,42 @@ static QString msgParameterMissing(const QString &a)
     return DebuggerPlugin::tr("Option \"%1\" is missing the parameter.").arg(a);
 }
 
+static Kit *guessKitFromParameters(const DebuggerRunParameters &rp)
+{
+    Kit *kit = 0;
+
+    // Try to find a kit via ABI.
+    QList<Abi> abis;
+    if (rp.toolChainAbi.isValid())
+        abis.push_back(rp.toolChainAbi);
+    else if (!rp.inferior.executable.isEmpty())
+        abis = Abi::abisOfBinary(FileName::fromString(rp.inferior.executable));
+
+    if (!abis.isEmpty()) {
+        // Try exact abis.
+        kit = KitManager::find(KitMatcher([abis](const Kit *k) -> bool {
+            if (const ToolChain *tc = ToolChainKitInformation::toolChain(k))
+                return abis.contains(tc->targetAbi()) && DebuggerKitInformation::isValidDebugger(k);
+            return false;
+        }));
+        if (!kit) {
+            // Or something compatible.
+            kit = KitManager::find(KitMatcher([abis](const Kit *k) -> bool {
+                if (const ToolChain *tc = ToolChainKitInformation::toolChain(k))
+                    foreach (const Abi &a, abis)
+                        if (a.isCompatibleWith(tc->targetAbi()) && DebuggerKitInformation::isValidDebugger(k))
+                            return true;
+                return false;
+            }));
+        }
+    }
+
+    if (!kit)
+        kit = KitManager::defaultKit();
+
+    return kit;
+}
+
 bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
     const QStringList::const_iterator &cend, QString *errorMessage)
 {
@@ -1135,6 +1154,9 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
         rp.inferior.environment = Utils::Environment::systemEnvironment();
         rp.stubEnvironment = Utils::Environment::systemEnvironment();
         rp.debuggerEnvironment = Utils::Environment::systemEnvironment();
+
+        if (!kit)
+            kit = guessKitFromParameters(rp);
         m_scheduledStarts.append(QPair<DebuggerRunParameters, Kit *>(rp, kit));
         return true;
     }
@@ -1323,14 +1345,14 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
         this, &DebuggerPluginPrivate::updateWatchersHeader, Qt::QueuedConnection);
 
     auto act = m_continueAction = new QAction(tr("Continue"), this);
-    act->setIcon(Icon::combinedIcon({Core::Icons::DEBUG_CONTINUE_SMALL.icon(), continueSideBarIcon}));
+    act->setIcon(Icon::combinedIcon({Icons::DEBUG_CONTINUE_SMALL.icon(), continueSideBarIcon}));
     connect(act, &QAction::triggered, this, &DebuggerPluginPrivate::handleExecContinue);
 
     act = m_exitAction = new QAction(tr("Stop Debugger"), this);
-    act->setIcon(Core::Icons::DEBUG_EXIT_SMALL.icon());
+    act->setIcon(Icons::DEBUG_EXIT_SMALL.icon());
     connect(act, &QAction::triggered, this, &DebuggerPluginPrivate::handleExecExit);
 
-    auto interruptIcon = Icon::combinedIcon({Core::Icons::DEBUG_INTERRUPT_SMALL.icon(), interruptSideBarIcon});
+    auto interruptIcon = Icon::combinedIcon({Icons::DEBUG_INTERRUPT_SMALL.icon(), interruptSideBarIcon});
     act = m_interruptAction = new QAction(tr("Interrupt"), this);
     act->setIcon(interruptIcon);
     connect(act, &QAction::triggered, this, &DebuggerPluginPrivate::handleExecInterrupt);
@@ -1417,7 +1439,7 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
     act = m_startAction = new QAction(this);
     const QIcon sideBarIcon =
             Icon::sideBarIcon(ProjectExplorer::Icons::DEBUG_START, ProjectExplorer::Icons::DEBUG_START_FLAT);
-    const QIcon debuggerIcon = Icon::combinedIcon({Core::Icons::DEBUG_START_SMALL.icon(), sideBarIcon});
+    const QIcon debuggerIcon = Icon::combinedIcon({ProjectExplorer::Icons::DEBUG_START_SMALL.icon(), sideBarIcon});
     act->setIcon(debuggerIcon);
     act->setText(tr("Start Debugging"));
     connect(act, &QAction::triggered, [] { ProjectExplorerPlugin::runStartupProject(ProjectExplorer::Constants::DEBUG_RUN_MODE); });
@@ -1709,13 +1731,16 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
     connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
         this, &DebuggerPluginPrivate::updateDebugWithoutDeployMenu);
 
+    m_mainWindow->finalizeSetup();
+
     // Debug mode setup
-    auto mode = new DebugMode(m_mainWindow);
+    m_mode = new DebugMode;
+    m_modeWindow = createModeWindow(m_mode, m_mainWindow, 0);
+    m_mode->setWidget(m_modeWindow);
 
-    (void) new DebugModeContext(m_mainWindow);
-    m_mainWindow->finalizeSetup(mode);
+    m_plugin->addAutoReleasedObject(new DebugModeContext(m_mainWindow));
 
-    m_plugin->addAutoReleasedObject(mode);
+    m_plugin->addObject(m_mode);
 
 
     connect(SessionManager::instance(), &SessionManager::startupProjectChanged,
@@ -2074,6 +2099,8 @@ void DebuggerPlugin::attachExternalApplication(RunControl *rc)
     if (const RunConfiguration *runConfiguration = rc->runConfiguration())
         if (const Target *target = runConfiguration->target())
             kit = target->kit();
+    if (!kit)
+        kit = guessKitFromParameters(rp);
     createAndScheduleRun(rp, kit);
 }
 
@@ -3005,6 +3032,23 @@ void DebuggerPluginPrivate::aboutToShutdown()
     disconnect(SessionManager::instance(),
         SIGNAL(startupProjectChanged(ProjectExplorer::Project*)),
         this, 0);
+
+    m_mainWindow->saveCurrentPerspective();
+    delete m_mainWindow;
+    m_mainWindow = 0;
+
+    // removeObject leads to aboutToRemoveObject, which leads to
+    // ModeManager::aboutToRemove, which leads to the mode manager
+    // removing the mode's widget from the stackwidget
+    // (currently by index, but possibly the stackwidget resets the
+    // parent and stuff on the widget)
+    m_plugin->removeObject(m_mode);
+
+    delete m_modeWindow;
+    m_modeWindow = 0;
+
+    delete m_mode;
+    m_mode = 0;
 }
 
 void updateState(DebuggerEngine *engine)
@@ -3172,7 +3216,6 @@ IPlugin::ShutdownFlag DebuggerPlugin::aboutToShutdown()
 {
     removeObject(this);
     dd->aboutToShutdown();
-    dd->m_mainWindow->saveCurrentPerspective();
     return SynchronousShutdown;
 }
 
@@ -3479,15 +3522,15 @@ void registerToolbar(const QByteArray &perspectiveId, const ToolbarDescription &
 
 QAction *createStartAction()
 {
-    auto action = new QAction(DebuggerMainWindow::tr("Start"), 0);
-    action->setIcon(Debugger::Icons::ANALYZER_CONTROL_START.icon());
+    auto action = new QAction(DebuggerMainWindow::tr("Start"), DebuggerPlugin::instance());
+    action->setIcon(Icons::ANALYZER_CONTROL_START.icon());
     action->setEnabled(true);
     return action;
 }
 
 QAction *createStopAction()
 {
-    auto action = new QAction(DebuggerMainWindow::tr("Stop"), 0);
+    auto action = new QAction(DebuggerMainWindow::tr("Stop"), DebuggerPlugin::instance());
     action->setIcon(ProjectExplorer::Icons::STOP_SMALL.icon());
     action->setEnabled(true);
     return action;
diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp
index ce539d358fb6e6a81984c6e6e9c2ba4bf025c6ed..5b2a8cbecb3e6129d3dbf217ddf8bc29057a8e75 100644
--- a/src/plugins/debugger/debuggerruncontrol.cpp
+++ b/src/plugins/debugger/debuggerruncontrol.cpp
@@ -43,6 +43,7 @@
 #include <projectexplorer/environmentaspect.h> // For the environment
 #include <projectexplorer/project.h>
 #include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/projectexplorericons.h>
 #include <projectexplorer/runnables.h>
 #include <projectexplorer/target.h>
 #include <projectexplorer/taskhub.h>
@@ -54,7 +55,6 @@
 #include <utils/qtcprocess.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
-#include <coreplugin/coreicons.h>
 #include <qmldebug/qmldebugcommandlinearguments.h>
 
 #include <qtsupport/qtkitinformation.h>
@@ -111,7 +111,7 @@ DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfig, DebuggerEngi
       m_engine(engine),
       m_running(false)
 {
-    setIcon(Core::Icons::DEBUG_START_SMALL);
+    setIcon(ProjectExplorer::Icons::DEBUG_START_SMALL);
     connect(this, &RunControl::finished, this, &DebuggerRunControl::handleFinished);
 
     connect(engine, &DebuggerEngine::requestRemoteSetup,
@@ -321,6 +321,7 @@ void DebuggerRunControlCreator::initialize(const DebuggerStartParameters &sp)
 void DebuggerRunControlCreator::enrich(const RunConfiguration *runConfig, const Kit *kit)
 {
     m_runConfig = runConfig;
+    QTC_ASSERT(kit, return);
 
     Target *target = 0;
     Project *project = 0;
@@ -329,13 +330,6 @@ void DebuggerRunControlCreator::enrich(const RunConfiguration *runConfig, const
     if (m_runConfig)
         target = m_runConfig->target();
 
-    if (!kit && target)
-        kit = target->kit();
-
-    // Make sure we have something sensible to start with.
-    m_rp.inferior.runMode = ApplicationLauncher::Console;
-    m_rp.useTerminal = false;
-
     // Extract as much as possible from available RunConfiguration.
     if (m_runConfig && m_runConfig->runnable().is<StandardRunnable>()) {
         m_rp.inferior = m_runConfig->runnable().as<StandardRunnable>();
@@ -351,46 +345,6 @@ void DebuggerRunControlCreator::enrich(const RunConfiguration *runConfig, const
                 m_rp.inferior.executable = p.exe;
     }
 
-    if (!kit) {
-        // This code can only be reached when starting via the command line
-        // (-debug pid or executable) or attaching from runconfiguration
-        // without specifying a kit. Try to find a kit via ABI.
-        QList<Abi> abis;
-        if (m_rp.toolChainAbi.isValid()) {
-            abis.push_back(m_rp.toolChainAbi);
-        } else if (!m_rp.inferior.executable.isEmpty()) {
-            abis = Abi::abisOfBinary(FileName::fromString(m_rp.inferior.executable));
-        }
-
-        if (!abis.isEmpty()) {
-            // Try exact abis.
-            kit = KitManager::find(KitMatcher([abis](const Kit *k) -> bool {
-                if (const ToolChain *tc = ToolChainKitInformation::toolChain(k))
-                    return abis.contains(tc->targetAbi()) && DebuggerKitInformation::isValidDebugger(k);
-                return false;
-            }));
-            if (!kit) {
-                // Or something compatible.
-                kit = KitManager::find(KitMatcher([abis](const Kit *k) -> bool {
-                    if (const ToolChain *tc = ToolChainKitInformation::toolChain(k))
-                        foreach (const Abi &a, abis)
-                            if (a.isCompatibleWith(tc->targetAbi()) && DebuggerKitInformation::isValidDebugger(k))
-                                return true;
-                    return false;
-                }));
-            }
-        }
-    }
-
-    if (!kit)
-        kit = KitManager::defaultKit();
-
-    // We really should have a kit now.
-    if (!kit) {
-        m_errors.append(DebuggerKitInformation::tr("No kit found."));
-        return;
-    }
-
     m_rp.macroExpander = kit->macroExpander();
 
     if (m_runConfig) {
@@ -416,7 +370,7 @@ void DebuggerRunControlCreator::enrich(const RunConfiguration *runConfig, const
     if (project && m_rp.projectSourceFiles.isEmpty())
         m_rp.projectSourceFiles = project->files(Project::SourceFiles);
 
-    if (false && project && kit) {
+    if (false && project) {
         const QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(kit);
         m_rp.nativeMixedEnabled = version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 7, 0);
     }
@@ -622,7 +576,7 @@ public:
         // We cover only local setup here. Remote setups are handled by the
         // RunControl factories in the target specific plugins.
         DebuggerRunControlCreator creator;
-        creator.enrich(runConfig, 0);
+        creator.enrich(runConfig, runConfig->target()->kit());
         creator.createRunControl(mode);
         if (errorMessage)
             *errorMessage = creator.fullError();
@@ -660,6 +614,7 @@ QObject *createDebuggerRunControlFactory(QObject *parent)
  */
 DebuggerRunControl *createAndScheduleRun(const DebuggerRunParameters &rp, const Kit *kit)
 {
+    QTC_ASSERT(kit, return 0); // Caller needs to look for a suitable kit.
     DebuggerRunControlCreator creator;
     creator.m_rp = rp;
     creator.enrich(0, kit);
@@ -683,9 +638,10 @@ DebuggerRunControl *createDebuggerRunControl(const DebuggerStartParameters &sp,
                                              QString *errorMessage,
                                              Core::Id runMode)
 {
+    QTC_ASSERT(runConfig, return 0);
     DebuggerRunControlCreator creator;
     creator.initialize(sp);
-    creator.enrich(runConfig, 0);
+    creator.enrich(runConfig, runConfig->target()->kit());
     creator.createRunControl(runMode);
     if (errorMessage)
         *errorMessage = creator.fullError();
diff --git a/src/plugins/coreplugin/images/continue_overlay_small.png b/src/plugins/debugger/images/continue_overlay_small.png
similarity index 100%
rename from src/plugins/coreplugin/images/continue_overlay_small.png
rename to src/plugins/debugger/images/continue_overlay_small.png
diff --git a/src/plugins/coreplugin/images/continue_overlay_small@2x.png b/src/plugins/debugger/images/continue_overlay_small@2x.png
similarity index 100%
rename from src/plugins/coreplugin/images/continue_overlay_small@2x.png
rename to src/plugins/debugger/images/continue_overlay_small@2x.png
diff --git a/src/plugins/coreplugin/images/interrupt_overlay_small.png b/src/plugins/debugger/images/interrupt_overlay_small.png
similarity index 100%
rename from src/plugins/coreplugin/images/interrupt_overlay_small.png
rename to src/plugins/debugger/images/interrupt_overlay_small.png
diff --git a/src/plugins/coreplugin/images/interrupt_overlay_small@2x.png b/src/plugins/debugger/images/interrupt_overlay_small@2x.png
similarity index 100%
rename from src/plugins/coreplugin/images/interrupt_overlay_small@2x.png
rename to src/plugins/debugger/images/interrupt_overlay_small@2x.png
diff --git a/src/plugins/coreplugin/images/stop_overlay_small.png b/src/plugins/debugger/images/stop_overlay_small.png
similarity index 100%
rename from src/plugins/coreplugin/images/stop_overlay_small.png
rename to src/plugins/debugger/images/stop_overlay_small.png
diff --git a/src/plugins/coreplugin/images/stop_overlay_small@2x.png b/src/plugins/debugger/images/stop_overlay_small@2x.png
similarity index 100%
rename from src/plugins/coreplugin/images/stop_overlay_small@2x.png
rename to src/plugins/debugger/images/stop_overlay_small@2x.png
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 1337cb864f8383bb3b70c86626fe80d4c50310eb..4852bf1c97877f33dcebd6a2b9d75701f838b0b5 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -1078,16 +1078,24 @@ Qt::ItemFlags WatchModel::flags(const QModelIndex &idx) const
 
     const Qt::ItemFlags notEditable = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
     const Qt::ItemFlags editable = notEditable | Qt::ItemIsEditable;
+    bool isRunning = true;
+    switch (state) {
+    case InferiorStopOk:
+    case InferiorUnrunnable:
+    case DebuggerNotReady:
+    case DebuggerFinished:
+        isRunning = false;
+        break;
+    default:
+        break;
+    }
 
     if (item->isWatcher()) {
         if (state == InferiorUnrunnable)
             return (column == 0 && item->iname.count('.') == 1) ? editable : notEditable;
 
-        if (state != InferiorStopOk
-                && state != DebuggerNotReady
-                && state != DebuggerFinished
-                && !m_engine->hasCapability(AddWatcherWhileRunningCapability))
-            return Qt::ItemFlags();
+        if (isRunning && !m_engine->hasCapability(AddWatcherWhileRunningCapability))
+            return notEditable;
         if (column == 0 && item->iname.count('.') == 1)
             return editable; // Watcher names are editable.
         if (column == 1 && item->arrayIndex >= 0)
@@ -1101,8 +1109,10 @@ Qt::ItemFlags WatchModel::flags(const QModelIndex &idx) const
                 return editable; // Watcher values are sometimes editable.
         }
     } else if (item->isLocal()) {
-        if (state != InferiorStopOk && !m_engine->hasCapability(AddWatcherWhileRunningCapability))
-           return Qt::ItemFlags();
+        if (state == InferiorUnrunnable)
+            return notEditable;
+        if (isRunning && !m_engine->hasCapability(AddWatcherWhileRunningCapability))
+            return notEditable;
         if (column == 1 && item->valueEditable && !item->elided)
             return editable; // Locals values are sometimes editable.
         if (column == 1 && item->arrayIndex >= 0)
@@ -1787,7 +1797,7 @@ static void showInEditorHelper(const WatchItem *item, QTextStream &ts, int depth
 {
     const QChar tab = QLatin1Char('\t');
     const QChar nl = QLatin1Char('\n');
-    ts << QString(depth, tab) << item->name << tab << item->value << tab
+    ts << QString(depth, tab) << item->name << tab << displayValue(item) << tab
        << item->type << nl;
     foreach (const TreeItem *child, item->children())
         showInEditorHelper(static_cast<const WatchItem *>(child), ts, depth + 1);
diff --git a/src/plugins/help/help.qrc b/src/plugins/help/help.qrc
index a0b727d945b63f938ba70b18fdd721a32909e657..0532deb78220a04f31bfed6ce40dcf78072f4050 100644
--- a/src/plugins/help/help.qrc
+++ b/src/plugins/help/help.qrc
@@ -3,7 +3,9 @@
         <file>images/find.png</file>
         <file>images/book.png</file>
         <file>images/home.png</file>
+        <file>images/home@2x.png</file>
         <file>images/bookmark.png</file>
+        <file>images/bookmark@2x.png</file>
         <file>images/category_help.png</file>
         <file>images/mode_help.png</file>
         <file>images/mode_help@2x.png</file>
diff --git a/src/plugins/help/images/bookmark.png b/src/plugins/help/images/bookmark.png
index 57e57e343ba5e5d710fe01b1720d06aacf97863d..4e2a562ac0163645bd1c08dc2870c604b2c566e8 100644
Binary files a/src/plugins/help/images/bookmark.png and b/src/plugins/help/images/bookmark.png differ
diff --git a/src/plugins/help/images/bookmark@2x.png b/src/plugins/help/images/bookmark@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..6281a74230b564eb4bfc7992c6c75f7241405ebf
Binary files /dev/null and b/src/plugins/help/images/bookmark@2x.png differ
diff --git a/src/plugins/help/images/home.png b/src/plugins/help/images/home.png
index 9cee3025d0722e36b371a0cbdcea447335fa5513..45b92a001e36b58bec61dbc209b7eec5a5cf6944 100644
Binary files a/src/plugins/help/images/home.png and b/src/plugins/help/images/home.png differ
diff --git a/src/plugins/help/images/home@2x.png b/src/plugins/help/images/home@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..72629cb719ce2150e7579fc04af1f8437310ef87
Binary files /dev/null and b/src/plugins/help/images/home@2x.png differ
diff --git a/src/plugins/help/qtwebkithelpviewer.cpp b/src/plugins/help/qtwebkithelpviewer.cpp
index 6b3541a27322d03c3e48f64ae1b45c63be86ffb6..395a89df9c0f416902f76b21da8a3724ba335271 100644
--- a/src/plugins/help/qtwebkithelpviewer.cpp
+++ b/src/plugins/help/qtwebkithelpviewer.cpp
@@ -136,9 +136,9 @@ QNetworkReply *HelpNetworkAccessManager::createRequest(Operation op,
     return new HelpNetworkReply(request, data.data, data.mimeType);
 }
 
-// - HelpPage
+// - QtWebKitHelpPage
 
-HelpPage::HelpPage(QObject *parent)
+QtWebKitHelpPage::QtWebKitHelpPage(QObject *parent)
     : QWebPage(parent)
     , closeNewTabIfNeeded(false)
     , m_pressedButtons(Qt::NoButton)
@@ -149,18 +149,18 @@ HelpPage::HelpPage(QObject *parent)
         SLOT(onHandleUnsupportedContent(QNetworkReply*)));
 }
 
-QWebPage *HelpPage::createWindow(QWebPage::WebWindowType)
+QWebPage *QtWebKitHelpPage::createWindow(QWebPage::WebWindowType)
 {
     // TODO: ensure that we'll get a QtWebKitHelpViewer here
     QtWebKitHelpViewer* viewer = static_cast<QtWebKitHelpViewer *>(OpenPagesManager::instance()
         .createPage());
-    HelpPage *newPage = viewer->page();
+    QtWebKitHelpPage *newPage = viewer->page();
     newPage->closeNewTabIfNeeded = closeNewTabIfNeeded;
     closeNewTabIfNeeded = false;
     return newPage;
 }
 
-void HelpPage::triggerAction(WebAction action, bool checked)
+void QtWebKitHelpPage::triggerAction(WebAction action, bool checked)
 {
     switch (action) {
         case OpenLinkInNewWindow:
@@ -171,7 +171,7 @@ void HelpPage::triggerAction(WebAction action, bool checked)
     }
 }
 
-bool HelpPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request,
+bool QtWebKitHelpPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request,
     QWebPage::NavigationType type)
 {
     const bool closeNewTab = closeNewTabIfNeeded;
@@ -198,7 +198,7 @@ bool HelpPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &
     return true;
 }
 
-void HelpPage::onHandleUnsupportedContent(QNetworkReply *reply)
+void QtWebKitHelpPage::onHandleUnsupportedContent(QNetworkReply *reply)
 {
     // sub resource of this page
     if (m_loadingUrl != reply->url()) {
@@ -254,7 +254,7 @@ QtWebKitHelpWidget::QtWebKitHelpWidget(QtWebKitHelpViewer *parent)
 
     QWebSettings::globalSettings()->setAttribute(QWebSettings::DnsPrefetchEnabled, true);
 
-    setPage(new HelpPage(this));
+    setPage(new QtWebKitHelpPage(this));
     HelpNetworkAccessManager *manager = new HelpNetworkAccessManager(this);
     page()->setNetworkAccessManager(manager);
     connect(manager, SIGNAL(finished(QNetworkReply*)), this,
@@ -323,7 +323,7 @@ void QtWebKitHelpWidget::mousePressEvent(QMouseEvent *event)
     if (Utils::HostOsInfo::isLinuxHost() && m_parent->handleForwardBackwardMouseButtons(event))
         return;
 
-    if (HelpPage *currentPage = static_cast<HelpPage*>(page())) {
+    if (QtWebKitHelpPage *currentPage = static_cast<QtWebKitHelpPage*>(page())) {
         currentPage->m_pressedButtons = event->buttons();
         currentPage->m_keyboardModifiers = event->modifiers();
     }
@@ -402,7 +402,7 @@ QtWebKitHelpViewer::QtWebKitHelpViewer(QWidget *parent)
     connect(m_webView->page(), SIGNAL(printRequested(QWebFrame*)), this, SIGNAL(printRequested()));
     connect(m_webView, SIGNAL(backwardAvailable(bool)), this, SIGNAL(backwardAvailable(bool)));
     connect(m_webView, SIGNAL(forwardAvailable(bool)), this, SIGNAL(forwardAvailable(bool)));
-    connect(page(), &HelpPage::linkHovered, this, &QtWebKitHelpViewer::setToolTip);
+    connect(page(), &QtWebKitHelpPage::linkHovered, this, &QtWebKitHelpViewer::setToolTip);
 }
 
 QFont QtWebKitHelpViewer::viewerFont() const
@@ -582,9 +582,9 @@ bool QtWebKitHelpViewer::findText(const QString &text, FindFlags flags,
     return found;
 }
 
-HelpPage *QtWebKitHelpViewer::page() const
+QtWebKitHelpPage *QtWebKitHelpViewer::page() const
 {
-    return static_cast<HelpPage *>(m_webView->page());
+    return static_cast<QtWebKitHelpPage *>(m_webView->page());
 }
 
 void QtWebKitHelpViewer::copy()
diff --git a/src/plugins/help/qtwebkithelpviewer.h b/src/plugins/help/qtwebkithelpviewer.h
index 186d6f4b183638dd53eaddc2b26ae73007d1b450..ff85a92a28cf039de020103fa3cad3fca1bacf86 100644
--- a/src/plugins/help/qtwebkithelpviewer.h
+++ b/src/plugins/help/qtwebkithelpviewer.h
@@ -35,7 +35,7 @@
 namespace Help {
 namespace Internal {
 
-class HelpPage;
+class QtWebKitHelpPage;
 class QtWebKitHelpWidget;
 
 class QtWebKitHelpViewer : public HelpViewer
@@ -69,7 +69,7 @@ public:
     bool findText(const QString &text, Core::FindFlags flags,
         bool incremental, bool fromSearch, bool *wrapped = 0);
 
-    HelpPage *page() const;
+    QtWebKitHelpPage *page() const;
 
 public slots:
     void scaleUp();
@@ -127,11 +127,11 @@ private:
     QtWebKitHelpViewer *m_parent;
 };
 
-class HelpPage : public QWebPage
+class QtWebKitHelpPage : public QWebPage
 {
     Q_OBJECT
 public:
-    HelpPage(QObject *parent);
+    QtWebKitHelpPage(QObject *parent);
 
 protected:
     virtual QWebPage *createWindow(QWebPage::WebWindowType);
diff --git a/src/plugins/help/textbrowserhelpviewer.h b/src/plugins/help/textbrowserhelpviewer.h
index cbe56524eca15aa8b0e7ae7c038059ccfe701488..fccf79a532658724ee9ded8c1126611345c1ded2 100644
--- a/src/plugins/help/textbrowserhelpviewer.h
+++ b/src/plugins/help/textbrowserhelpviewer.h
@@ -81,8 +81,6 @@ private slots:
     void goToHistoryItem();
 
 private:
-    QVariant loadResource(int type, const QUrl &name);
-
     TextBrowserHelpWidget *m_textBrowser;
 };
 
@@ -109,11 +107,11 @@ private:
     QString linkAt(const QPoint& pos);
     void openLink(const QUrl &url, bool newPage);
 
-public:
     int zoomCount;
     bool forceFont;
     bool m_openInNewPageActionVisible;
     TextBrowserHelpViewer *m_parent;
+    friend class Help::Internal::TextBrowserHelpViewer;
 };
 
 }   // namespace Internal
diff --git a/src/plugins/help/webenginehelpviewer.cpp b/src/plugins/help/webenginehelpviewer.cpp
index 5d2e2d2f356d1f4842a15bfe86ae5dbc3213f7bd..55ebc4e57e9437798f11143b6f148c4b74c8d4b3 100644
--- a/src/plugins/help/webenginehelpviewer.cpp
+++ b/src/plugins/help/webenginehelpviewer.cpp
@@ -73,7 +73,7 @@ WebEngineHelpViewer::WebEngineHelpViewer(QWidget *parent) :
     HelpViewer(parent),
     m_widget(new WebView(this))
 {
-    m_widget->setPage(new HelpPage(this));
+    m_widget->setPage(new WebEngineHelpPage(this));
     auto layout = new QVBoxLayout;
     setLayout(layout);
     layout->setContentsMargins(0, 0, 0, 0);
@@ -226,9 +226,9 @@ bool WebEngineHelpViewer::findText(const QString &text, Core::FindFlags flags, b
     return true;
 }
 
-HelpPage *WebEngineHelpViewer::page() const
+WebEngineHelpPage *WebEngineHelpViewer::page() const
 {
-    return static_cast<HelpPage *>(m_widget->page());
+    return static_cast<WebEngineHelpPage *>(m_widget->page());
 }
 
 void WebEngineHelpViewer::scaleUp()
@@ -271,12 +271,12 @@ void WebEngineHelpViewer::print(QPrinter *printer)
     Q_UNUSED(printer)
 }
 
-HelpPage::HelpPage(QObject *parent)
+WebEngineHelpPage::WebEngineHelpPage(QObject *parent)
     : QWebEnginePage(parent)
 {
 }
 
-QWebEnginePage *HelpPage::createWindow(QWebEnginePage::WebWindowType)
+QWebEnginePage *WebEngineHelpPage::createWindow(QWebEnginePage::WebWindowType)
 {
     auto viewer = static_cast<WebEngineHelpViewer *>(OpenPagesManager::instance().createPage());
     return viewer->page();
diff --git a/src/plugins/help/webenginehelpviewer.h b/src/plugins/help/webenginehelpviewer.h
index 7d777ab48750145830276f921670b80c54ec90ea..ba8d0adfb389137cb39c54dfe27d5e57acbc4f39 100644
--- a/src/plugins/help/webenginehelpviewer.h
+++ b/src/plugins/help/webenginehelpviewer.h
@@ -40,10 +40,10 @@ public:
     void requestStarted(QWebEngineUrlRequestJob *job) override;
 };
 
-class HelpPage : public QWebEnginePage
+class WebEngineHelpPage : public QWebEnginePage
 {
 public:
-    explicit HelpPage(QObject *parent = 0);
+    explicit WebEngineHelpPage(QObject *parent = 0);
     QWebEnginePage *createWindow(QWebEnginePage::WebWindowType) override;
 };
 
@@ -83,7 +83,7 @@ public:
     void setOpenInNewPageActionVisible(bool visible) override;
     bool findText(const QString &text, Core::FindFlags flags, bool incremental, bool fromSearch, bool *wrapped) override;
 
-    HelpPage *page() const;
+    WebEngineHelpPage *page() const;
 
 public slots:
     void scaleUp() override;
diff --git a/src/plugins/ios/iosruncontrol.cpp b/src/plugins/ios/iosruncontrol.cpp
index 90b276119c4b711328526b6b3b44daa3c9a23e57..47e019a6e6bb5f09cdfad53febb85be4f03dd038 100644
--- a/src/plugins/ios/iosruncontrol.cpp
+++ b/src/plugins/ios/iosruncontrol.cpp
@@ -28,8 +28,8 @@
 #include "iosrunconfiguration.h"
 #include "iosrunner.h"
 
-#include <coreplugin/coreicons.h>
 #include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/projectexplorericons.h>
 
 using namespace ProjectExplorer;
 
@@ -41,7 +41,7 @@ IosRunControl::IosRunControl(IosRunConfiguration *rc)
     , m_runner(new IosRunner(this, rc, false, QmlDebug::NoQmlDebugServices))
     , m_running(false)
 {
-    setIcon(Core::Icons::DEBUG_START_SMALL);
+    setIcon(Icons::RUN_SMALL);
 }
 
 IosRunControl::~IosRunControl()
diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp
index 0ca23e9e7d6150dc64e6264564afc2a9bd5ef3a6..4084290281b15acc90f3add6447b4319150d4941 100644
--- a/src/plugins/projectexplorer/appoutputpane.cpp
+++ b/src/plugins/projectexplorer/appoutputpane.cpp
@@ -181,7 +181,7 @@ AppOutputPane::AppOutputPane() :
     // Attach
     m_attachButton->setToolTip(msgAttachDebuggerTooltip());
     m_attachButton->setEnabled(false);
-    m_attachButton->setIcon(Core::Icons::DEBUG_START_SMALL.icon());
+    m_attachButton->setIcon(Icons::DEBUG_START_SMALL.icon());
     m_attachButton->setAutoRaise(true);
 
     connect(m_attachButton, &QAbstractButton::clicked,
diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp
index f1f3d5dbbdce6515c00d59efd00ff7f43c0a9534..b65ee827766fc0334a90f53c2364737d0e00cbb0 100644
--- a/src/plugins/projectexplorer/gcctoolchain.cpp
+++ b/src/plugins/projectexplorer/gcctoolchain.cpp
@@ -62,6 +62,7 @@ static const char compilerCommandKeyC[] = "ProjectExplorer.GccToolChain.Path";
 static const char compilerPlatformCodeGenFlagsKeyC[] = "ProjectExplorer.GccToolChain.PlatformCodeGenFlags";
 static const char compilerPlatformLinkerFlagsKeyC[] = "ProjectExplorer.GccToolChain.PlatformLinkerFlags";
 static const char targetAbiKeyC[] = "ProjectExplorer.GccToolChain.TargetAbi";
+static const char originalTargetTripleKeyC[] = "ProjectExplorer.GccToolChain.OriginalTargetTriple";
 static const char supportedAbisKeyC[] = "ProjectExplorer.GccToolChain.SupportedAbis";
 
 static QByteArray runGcc(const FileName &gcc, const QStringList &arguments, const QStringList &env)
@@ -214,19 +215,20 @@ static QList<Abi> guessGccAbi(const QString &m, const QByteArray &macros)
     return abiList;
 }
 
-static QList<Abi> guessGccAbi(const FileName &path, const QStringList &env,
-                              const QByteArray &macros,
-                              const QStringList &extraArgs = QStringList())
+
+static GccToolChain::DetectedAbisResult guessGccAbi(const FileName &path, const QStringList &env,
+                                                   const QByteArray &macros,
+                                                   const QStringList &extraArgs = QStringList())
 {
     if (path.isEmpty())
-        return QList<Abi>();
+        return GccToolChain::DetectedAbisResult();
 
     QStringList arguments = extraArgs;
     arguments << QLatin1String("-dumpmachine");
     QString machine = QString::fromLocal8Bit(runGcc(path, arguments, env)).trimmed();
     if (machine.isEmpty())
-        return QList<Abi>(); // no need to continue if running failed once...
-    return guessGccAbi(machine, macros);
+        return GccToolChain::DetectedAbisResult(); // no need to continue if running failed once...
+    return GccToolChain::DetectedAbisResult(guessGccAbi(machine, macros), machine);
 }
 
 static QString gccVersion(const FileName &path, const QStringList &env)
@@ -260,6 +262,11 @@ void GccToolChain::setSupportedAbis(const QList<Abi> &m_abis)
     m_supportedAbis = m_abis;
 }
 
+void GccToolChain::setOriginalTargetTriple(const QString &targetTriple)
+{
+    m_originalTargetTriple = targetTriple;
+}
+
 void GccToolChain::setMacroCache(const QStringList &allCxxflags, const QByteArray &macros) const
 {
     if (macros.isNull())
@@ -318,6 +325,11 @@ Abi GccToolChain::targetAbi() const
     return m_targetAbi;
 }
 
+QString GccToolChain::originalTargetTriple() const
+{
+    return m_originalTargetTriple;
+}
+
 QString GccToolChain::version() const
 {
     if (m_version.isEmpty())
@@ -620,7 +632,9 @@ void GccToolChain::resetToolChain(const FileName &path)
     setCompilerCommand(path);
 
     Abi currentAbi = m_targetAbi;
-    m_supportedAbis = detectSupportedAbis();
+    const DetectedAbisResult detectedAbis = detectSupportedAbis();
+    m_supportedAbis = detectedAbis.supportedAbis;
+    m_originalTargetTriple = detectedAbis.originalTargetTriple;
 
     m_targetAbi = Abi();
     if (!m_supportedAbis.isEmpty()) {
@@ -687,6 +701,7 @@ QVariantMap GccToolChain::toMap() const
     data.insert(QLatin1String(compilerPlatformCodeGenFlagsKeyC), m_platformCodeGenFlags);
     data.insert(QLatin1String(compilerPlatformLinkerFlagsKeyC), m_platformLinkerFlags);
     data.insert(QLatin1String(targetAbiKeyC), m_targetAbi.toString());
+    data.insert(QLatin1String(originalTargetTripleKeyC), m_originalTargetTriple);
     QStringList abiList = Utils::transform(m_supportedAbis, &Abi::toString);
     data.insert(QLatin1String(supportedAbisKeyC), abiList);
     return data;
@@ -701,6 +716,7 @@ bool GccToolChain::fromMap(const QVariantMap &data)
     m_platformCodeGenFlags = data.value(QLatin1String(compilerPlatformCodeGenFlagsKeyC)).toStringList();
     m_platformLinkerFlags = data.value(QLatin1String(compilerPlatformLinkerFlagsKeyC)).toStringList();
     m_targetAbi = Abi(data.value(QLatin1String(targetAbiKeyC)).toString());
+    m_originalTargetTriple = data.value(QLatin1String(originalTargetTripleKeyC)).toString();
     QStringList abiList = data.value(QLatin1String(supportedAbisKeyC)).toStringList();
     m_supportedAbis.clear();
     foreach (const QString &a, abiList) {
@@ -730,11 +746,14 @@ ToolChainConfigWidget *GccToolChain::configurationWidget()
 
 void GccToolChain::updateSupportedAbis() const
 {
-    if (m_supportedAbis.isEmpty())
-        m_supportedAbis = detectSupportedAbis();
+    if (m_supportedAbis.isEmpty()) {
+        const DetectedAbisResult detected = detectSupportedAbis();
+        m_supportedAbis = detected.supportedAbis;
+        m_originalTargetTriple = detected.originalTargetTriple;
+    }
 }
 
-QList<Abi> GccToolChain::detectSupportedAbis() const
+GccToolChain::DetectedAbisResult GccToolChain::detectSupportedAbis() const
 {
     Environment env = Environment::systemEnvironment();
     addToEnvironment(env);
@@ -827,7 +846,10 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &comp
     GccToolChain::addCommandPathToEnvironment(compilerPath, systemEnvironment);
     QByteArray macros
             = gccPredefinedMacros(compilerPath, gccPredefinedMacrosOptions(), systemEnvironment.toStringList());
-    QList<Abi> abiList = guessGccAbi(compilerPath, systemEnvironment.toStringList(), macros);
+    const GccToolChain::DetectedAbisResult detectedAbis = guessGccAbi(compilerPath,
+                                                                      systemEnvironment.toStringList(),
+                                                                      macros);
+    QList<Abi> abiList = detectedAbis.supportedAbis;
     if (!abiList.contains(requiredAbi)) {
         if (requiredAbi.wordWidth() != 64
                 || !abiList.contains(Abi(requiredAbi.architecture(), requiredAbi.os(), requiredAbi.osFlavor(),
@@ -844,6 +866,7 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &comp
         tc->setCompilerCommand(compilerPath);
         tc->setSupportedAbis(abiList);
         tc->setTargetAbi(abi);
+        tc->setOriginalTargetTriple(detectedAbis.originalTargetTriple);
         tc->setDisplayName(tc->defaultDisplayName()); // reset displayname
 
         result.append(tc.take());
@@ -902,6 +925,7 @@ void GccToolChainConfigWidget::applyImpl()
     tc->setCompilerCommand(m_compilerCommand->fileName());
     tc->setSupportedAbis(m_abiWidget->supportedAbis());
     tc->setTargetAbi(m_abiWidget->currentAbi());
+    tc->setOriginalTargetTriple(tc->detectSupportedAbis().originalTargetTriple);
     tc->setDisplayName(displayName); // reset display name
     tc->setPlatformCodeGenFlags(splitString(m_platformCodeGenFlagsLineEdit->text()));
     tc->setPlatformLinkerFlags(splitString(m_platformLinkerFlagsLineEdit->text()));
@@ -975,7 +999,7 @@ void GccToolChainConfigWidget::handleCompilerCommandChange()
         QStringList args = gccPredefinedMacrosOptions() + splitString(m_platformCodeGenFlagsLineEdit->text());
         m_macros = gccPredefinedMacros(path, args, env.toStringList());
         abiList = guessGccAbi(path, env.toStringList(), m_macros,
-                              splitString(m_platformCodeGenFlagsLineEdit->text()));
+                              splitString(m_platformCodeGenFlagsLineEdit->text())).supportedAbis;
     }
     m_abiWidget->setEnabled(haveCompiler);
 
diff --git a/src/plugins/projectexplorer/gcctoolchain.h b/src/plugins/projectexplorer/gcctoolchain.h
index 849bee9f1037e5b8c44f18855b4b893028fd43b0..33c900537af78420162961c96c43d32c7e487b5f 100644
--- a/src/plugins/projectexplorer/gcctoolchain.h
+++ b/src/plugins/projectexplorer/gcctoolchain.h
@@ -54,6 +54,7 @@ public:
     GccToolChain(Core::Id typeId, Detection d);
     QString typeDisplayName() const override;
     Abi targetAbi() const override;
+    QString originalTargetTriple() const override;
     QString version() const;
     QList<Abi> supportedAbis() const;
     void setTargetAbi(const Abi &);
@@ -89,6 +90,19 @@ public:
 
     static void addCommandPathToEnvironment(const Utils::FileName &command, Utils::Environment &env);
 
+    class DetectedAbisResult {
+    public:
+        DetectedAbisResult() = default;
+        DetectedAbisResult(const QList<Abi> &supportedAbis,
+                           const QString &originalTargetTriple = QString())
+            : supportedAbis(supportedAbis)
+            , originalTargetTriple(originalTargetTriple)
+        {}
+
+        QList<Abi> supportedAbis;
+        QString originalTargetTriple;
+    };
+
 protected:
     typedef QList<QPair<QStringList, QByteArray> > GccCache;
 
@@ -98,13 +112,14 @@ protected:
 
     void setCompilerCommand(const Utils::FileName &path);
     void setSupportedAbis(const QList<Abi> &m_abis);
+    void setOriginalTargetTriple(const QString &targetTriple);
     void setMacroCache(const QStringList &allCxxflags, const QByteArray &macroCache) const;
     QByteArray macroCache(const QStringList &allCxxflags) const;
 
     virtual QString defaultDisplayName() const;
     virtual CompilerFlags defaultCompilerFlags() const;
 
-    virtual QList<Abi> detectSupportedAbis() const;
+    virtual DetectedAbisResult detectSupportedAbis() const;
     virtual QString detectVersion() const;
 
     // Reinterpret options for compiler drivers inheriting from GccToolChain (e.g qcc) to apply -Wp option
@@ -139,6 +154,7 @@ private:
 
     Abi m_targetAbi;
     mutable QList<Abi> m_supportedAbis;
+    mutable QString m_originalTargetTriple;
     mutable QList<HeaderPath> m_headerPaths;
     mutable QString m_version;
 
diff --git a/src/plugins/coreplugin/images/debugger_overlay_small.png b/src/plugins/projectexplorer/images/debugger_overlay_small.png
similarity index 100%
rename from src/plugins/coreplugin/images/debugger_overlay_small.png
rename to src/plugins/projectexplorer/images/debugger_overlay_small.png
diff --git a/src/plugins/coreplugin/images/debugger_overlay_small@2x.png b/src/plugins/projectexplorer/images/debugger_overlay_small@2x.png
similarity index 100%
rename from src/plugins/coreplugin/images/debugger_overlay_small@2x.png
rename to src/plugins/projectexplorer/images/debugger_overlay_small@2x.png
diff --git a/src/plugins/coreplugin/images/run_overlay_small.png b/src/plugins/projectexplorer/images/run_overlay_small.png
similarity index 100%
rename from src/plugins/coreplugin/images/run_overlay_small.png
rename to src/plugins/projectexplorer/images/run_overlay_small.png
diff --git a/src/plugins/coreplugin/images/run_overlay_small@2x.png b/src/plugins/projectexplorer/images/run_overlay_small@2x.png
similarity index 100%
rename from src/plugins/coreplugin/images/run_overlay_small@2x.png
rename to src/plugins/projectexplorer/images/run_overlay_small@2x.png
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 8e92a6613c22625417178569ad9c90da0eefa8a6..0448ad2e151901aaf0d087c6d8a335e1ac403035 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1352,6 +1352,15 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
             return bc ? bc->displayName() : QString();
         });
 
+    expander->registerVariable(Constants::VAR_CURRENTRUN_NAME,
+        tr("The currently active run configuration's name."),
+        [this]() -> QString {
+            if (Target *target = activeTarget()) {
+                if (RunConfiguration *rc = target->activeRunConfiguration())
+                    return rc->displayName();
+            }
+            return QString();
+        });
 
     expander->registerVariable(Constants::VAR_CURRENTBUILD_TYPE,
         tr("The currently active build configuration's type."),
@@ -3232,32 +3241,35 @@ void ProjectExplorerPluginPrivate::handleRenameFile()
 
 void ProjectExplorerPlugin::renameFile(Node *node, const QString &newFilePath)
 {
-    QString orgFilePath = node->filePath().toFileInfo().absoluteFilePath();
+    const QString oldFilePath = node->filePath().toFileInfo().absoluteFilePath();
     FolderNode *folderNode = node->parentFolderNode();
-    QString projectFileName = folderNode->projectNode()->filePath().fileName();
+    const QString projectFileName = folderNode->projectNode()->filePath().fileName();
+
+    if (oldFilePath == newFilePath)
+        return;
 
-    if (!folderNode->canRenameFile(orgFilePath, newFilePath)) {
-        QTimer::singleShot(0, [orgFilePath, newFilePath, projectFileName] {
+    if (!folderNode->canRenameFile(oldFilePath, newFilePath)) {
+        QTimer::singleShot(0, [oldFilePath, newFilePath, projectFileName] {
             int res = QMessageBox::question(ICore::mainWindow(),
                                             tr("Project Editing Failed"),
                                             tr("The project file %1 cannot be automatically changed.\n\n"
                                                "Rename %2 to %3 anyway?")
                                             .arg(projectFileName)
-                                            .arg(QDir::toNativeSeparators(orgFilePath))
+                                            .arg(QDir::toNativeSeparators(oldFilePath))
                                             .arg(QDir::toNativeSeparators(newFilePath)));
             if (res == QMessageBox::Yes)
-                FileUtils::renameFile(orgFilePath, newFilePath);
+                FileUtils::renameFile(oldFilePath, newFilePath);
 
         });
         return;
     }
 
-    if (FileUtils::renameFile(orgFilePath, newFilePath)) {
+    if (FileUtils::renameFile(oldFilePath, newFilePath)) {
         // Tell the project plugin about rename
-        if (!folderNode->renameFile(orgFilePath, newFilePath)) {
+        if (!folderNode->renameFile(oldFilePath, newFilePath)) {
             const QString renameFileError
                     = tr("The file %1 was renamed to %2, but the project file %3 could not be automatically changed.")
-                    .arg(QDir::toNativeSeparators(orgFilePath))
+                    .arg(QDir::toNativeSeparators(oldFilePath))
                     .arg(QDir::toNativeSeparators(newFilePath))
                     .arg(projectFileName);
 
@@ -3269,7 +3281,7 @@ void ProjectExplorerPlugin::renameFile(Node *node, const QString &newFilePath)
         }
     } else {
         const QString renameFileError = tr("The file %1 could not be renamed %2.")
-                .arg(QDir::toNativeSeparators(orgFilePath))
+                .arg(QDir::toNativeSeparators(oldFilePath))
                 .arg(QDir::toNativeSeparators(newFilePath));
 
         QTimer::singleShot(0, [renameFileError]() {
diff --git a/src/plugins/projectexplorer/projectexplorer.qrc b/src/plugins/projectexplorer/projectexplorer.qrc
index f86e90059496877cf1aa97e22c6f101ab02bb081..e8d0044e3ff22780242b32f0210c15ce952b3462 100644
--- a/src/plugins/projectexplorer/projectexplorer.qrc
+++ b/src/plugins/projectexplorer/projectexplorer.qrc
@@ -24,6 +24,10 @@
         <file>images/run_mask@2x.png</file>
         <file>images/run_small.png</file>
         <file>images/run_small@2x.png</file>
+        <file>images/debugger_overlay_small.png</file>
+        <file>images/debugger_overlay_small@2x.png</file>
+        <file>images/run_overlay_small.png</file>
+        <file>images/run_overlay_small@2x.png</file>
         <file>images/session.png</file>
         <file>images/targetrunselected.png</file>
         <file>images/targetrunselected@2x.png</file>
diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h
index 740e8190250e3398bcb1addf8cfe61da6ebd64d5..15c657b24917b39e0fda02cd05aea52571ea2048 100644
--- a/src/plugins/projectexplorer/projectexplorerconstants.h
+++ b/src/plugins/projectexplorer/projectexplorerconstants.h
@@ -236,6 +236,7 @@ const char VAR_CURRENTKIT_FILESYSTEMNAME[] = "CurrentKit:FileSystemName";
 const char VAR_CURRENTKIT_ID[] = "CurrentKit:Id";
 const char VAR_CURRENTBUILD_NAME[] = "CurrentBuild:Name";
 const char VAR_CURRENTBUILD_TYPE[] = "CurrentBuild:Type";
+const char VAR_CURRENTRUN_NAME[] = "CurrentRun:Name";
 const char VAR_CURRENTDEVICE_HOSTADDRESS[] = "CurrentDevice:HostAddress";
 const char VAR_CURRENTDEVICE_SSHPORT[] = "CurrentDevice:SshPort";
 const char VAR_CURRENTDEVICE_USERNAME[] = "CurrentDevice:UserName";
diff --git a/src/plugins/projectexplorer/projectexplorericons.h b/src/plugins/projectexplorer/projectexplorericons.h
index 447c94ea5e1218d1634d7746633c737697b6b364..05a2ce3c364e1215cf6d3369f4f5f0ee647bd49d 100644
--- a/src/plugins/projectexplorer/projectexplorericons.h
+++ b/src/plugins/projectexplorer/projectexplorericons.h
@@ -57,6 +57,9 @@ const Utils::Icon DEBUG_START(
 const Utils::Icon DEBUG_START_FLAT({
         {QLatin1String(":/projectexplorer/images/debugger_beetle_mask.png"), Utils::Theme::IconsDebugColor},
         {QLatin1String(":/projectexplorer/images/debugger_run_mask.png"), Utils::Theme::IconsRunColor}});
+const Utils::Icon DEBUG_START_SMALL({
+        {QLatin1String(":/projectexplorer/images/debugger_overlay_small.png"), Utils::Theme::IconsDebugColor},
+        {QLatin1String(":/projectexplorer/images/run_overlay_small.png"), Utils::Theme::IconsRunColor}});
 
 const Utils::Icon BUILDSTEP_MOVEUP({
         {QLatin1String(":/projectexplorer/images/buildstepmoveup.png"), Utils::Theme::PanelTextColorDark}}, Utils::Icon::Tint);
diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp
index 14fb83641ba7c952845500e9412a711bb101dcd0..c83c064de52f9fbe186f1a0c4cde061892c8f8f1 100644
--- a/src/plugins/projectexplorer/runconfiguration.cpp
+++ b/src/plugins/projectexplorer/runconfiguration.cpp
@@ -256,6 +256,9 @@ void RunConfiguration::ctor()
         BuildConfiguration *bc = target()->activeBuildConfiguration();
         return bc ? bc->macroExpander() : target()->macroExpander();
     });
+    expander->registerVariable(Constants::VAR_CURRENTRUN_NAME,
+            QCoreApplication::translate("ProjectExplorer", "The currently active run configuration's name."),
+            [this] { return displayName(); }, false);
 }
 
 /*!
diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h
index e00c2136aad7a8a177435016dc1927c7a01eea17..cac15dce6a8571bd9f80fbb9663af00ab0e504b6 100644
--- a/src/plugins/projectexplorer/toolchain.h
+++ b/src/plugins/projectexplorer/toolchain.h
@@ -80,6 +80,7 @@ public:
     Core::Id typeId() const;
     virtual QString typeDisplayName() const = 0;
     virtual Abi targetAbi() const = 0;
+    virtual QString originalTargetTriple() const { return QString(); }
 
     virtual bool isValid() const = 0;
 
diff --git a/src/plugins/qbsprojectmanager/qbsprojectparser.cpp b/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
index 5192ad38ef79de3e733c52ce7d6aecd6b5f31587..e4fc351edf18e158ecfa4e9ee2697d0e07805e2d 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
@@ -103,6 +103,8 @@ void QbsProjectParser::parse(const QVariantMap &config, const Environment &env,
     params.setSearchPaths(prefs.searchPaths(resourcesBaseDirectory()));
     params.setPluginPaths(prefs.pluginPaths(pluginsBaseDirectory()));
     params.setLibexecPath(libExecDirectory());
+    params.setProductErrorMode(qbs::ErrorHandlingMode::Relaxed);
+    params.setPropertyCheckingMode(qbs::ErrorHandlingMode::Relaxed);
 
     m_qbsSetupProjectJob = m_project.setupProject(params, QbsManager::logSink(), 0);
 
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp
index d83879e6da9a92cfde9399775d6d07dc76317647..2bdf16f76c7a38e9ee38a6923ead3475fa2d0427 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp
@@ -53,10 +53,6 @@ using namespace TextEditor;
 
 namespace QmakeProjectManager {
 
-QmakeManager::~QmakeManager()
-{
-}
-
 void QmakeManager::registerProject(QmakeProject *project)
 {
     m_projects.append(project);
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h
index ece682f76d574ccbe0659f1755e926f96f849e6a..28b8014bb6f243cc91361c38279c276ca4d9f78e 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h
@@ -48,8 +48,6 @@ class QMAKEPROJECTMANAGER_EXPORT QmakeManager : public ProjectExplorer::IProject
     Q_OBJECT
 
 public:
-    ~QmakeManager();
-
     void registerProject(QmakeProject *project);
     void unregisterProject(QmakeProject *project);
     void notifyChanged(const Utils::FileName &name);
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp
index 97c691c4f6df37099d4730c220d0040422f7d57a..43a8d57030c7ff6dd71be25087ae87ecb6c8e425 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp
@@ -125,7 +125,7 @@ bool QmakeProjectManagerPlugin::initialize(const QStringList &arguments, QString
             ActionManager::actionContainer(ProjectExplorer::Constants::M_FILECONTEXT);
 
     //register actions
-    Command *command;
+    Command *command = nullptr;
 
     m_buildSubProjectContextMenu = new Utils::ParameterAction(tr("Build"), tr("Build \"%1\""),
                                                               Utils::ParameterAction::AlwaysEnabled/*handled manually*/,
@@ -303,7 +303,7 @@ void QmakeProjectManagerPlugin::updateRunQMakeAction()
     bool enable = true;
     if (BuildManager::isBuilding(m_previousStartupProject))
         enable = false;
-    QmakeProject *pro = qobject_cast<QmakeProject *>(m_previousStartupProject);
+    auto pro = qobject_cast<QmakeProject *>(m_previousStartupProject);
     m_runQMakeAction->setVisible(pro);
     if (!pro
             || !pro->activeTarget()
@@ -317,20 +317,20 @@ void QmakeProjectManagerPlugin::updateContextActions(ProjectExplorer::Node *node
 {
     m_addLibraryActionContextMenu->setEnabled(dynamic_cast<QmakeProFileNode *>(node));
 
-    QmakeProFileNode *proFileNode = dynamic_cast<QmakeProFileNode *>(node);
-    QmakeProject *qmakeProject = qobject_cast<QmakeProject *>(project);
-    QmakeProFileNode *subProjectNode = 0;
+    auto proFileNode = dynamic_cast<QmakeProFileNode *>(node);
+    auto qmakeProject = qobject_cast<QmakeProject *>(project);
+    QmakeProFileNode *subProjectNode = nullptr;
     if (node) {
-        if (QmakePriFileNode *subPriFileNode = dynamic_cast<QmakePriFileNode *>(node->projectNode()))
+        if (auto subPriFileNode = dynamic_cast<QmakePriFileNode *>(node->projectNode()))
             subProjectNode = subPriFileNode->proFileNode();
     }
-    ProjectExplorer::FileNode *fileNode = node ? node->asFileNode() : 0;
+    ProjectExplorer::FileNode *fileNode = node ? node->asFileNode() : nullptr;
     bool buildFilePossible = subProjectNode && fileNode
             && (fileNode->fileType() == ProjectExplorer::SourceType);
 
     m_qmakeProjectManager->setContextNode(subProjectNode);
     m_qmakeProjectManager->setContextProject(qmakeProject);
-    m_qmakeProjectManager->setContextFile(buildFilePossible ? fileNode : 0);
+    m_qmakeProjectManager->setContextFile(buildFilePossible ? fileNode : nullptr);
 
     bool subProjectActionsVisible = qmakeProject && subProjectNode && (subProjectNode != qmakeProject->rootProjectNode());
 
@@ -344,8 +344,8 @@ void QmakeProjectManagerPlugin::updateContextActions(ProjectExplorer::Node *node
     m_buildSubProjectContextMenu->setParameter(subProjectName);
     m_buildFileAction->setParameter(buildFilePossible ? fileNode->filePath().fileName() : QString());
 
-    QmakeBuildConfiguration *buildConfiguration = (qmakeProject && qmakeProject->activeTarget()) ?
-                static_cast<QmakeBuildConfiguration *>(qmakeProject->activeTarget()->activeBuildConfiguration()) : 0;
+    auto buildConfiguration = (qmakeProject && qmakeProject->activeTarget()) ?
+                static_cast<QmakeBuildConfiguration *>(qmakeProject->activeTarget()->activeBuildConfiguration()) : nullptr;
     bool isProjectNode = qmakeProject && proFileNode && buildConfiguration;
     bool isBuilding = BuildManager::isBuilding(project);
     bool enabled = subProjectActionsVisible && !isBuilding;
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
index 40ee9645dcb2cded5c5ef285d241c60be8ec4e08..72de3a7cd0ddfa59a20565ac95a6dbb51c4d82c1 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
@@ -34,6 +34,7 @@
 #include "metainfo.h"
 
 #include <utils/stylehelper.h>
+#include <utils/theme/theme.h>
 
 #include <QLineEdit>
 #include <QPen>
@@ -169,18 +170,23 @@ NavigatorTreeView::NavigatorTreeView(QWidget *parent)
 void NavigatorTreeView::drawSelectionBackground(QPainter *painter, const QStyleOption &option)
 {
     painter->save();
-    QLinearGradient gradient;
-
-    QColor highlightColor = Utils::StyleHelper::notTooBrightHighlightColor();
-    gradient.setColorAt(0, highlightColor.lighter(130));
-    gradient.setColorAt(1, highlightColor.darker(130));
-    gradient.setStart(option.rect.topLeft());
-    gradient.setFinalStop(option.rect.bottomLeft());
-    painter->fillRect(option.rect, gradient);
-    painter->setPen(highlightColor.lighter());
-    painter->drawLine(option.rect.topLeft(),option.rect.topRight());
-    painter->setPen(highlightColor.darker());
-    painter->drawLine(option.rect.bottomLeft(),option.rect.bottomRight());
+    if (Utils::creatorTheme()->widgetStyle() == Utils::Theme::StyleFlat) {
+        painter->setOpacity(0.5);
+        painter->fillRect(option.rect, option.palette.color(QPalette::Highlight));
+    } else {
+        const QColor highlightColor = Utils::StyleHelper::notTooBrightHighlightColor();
+        QLinearGradient gradient;
+        gradient.setColorAt(0, highlightColor.lighter(130));
+        gradient.setColorAt(1, highlightColor.darker(130));
+        gradient.setStart(option.rect.topLeft());
+        gradient.setFinalStop(option.rect.bottomLeft());
+        painter->fillRect(option.rect, gradient);
+        painter->setPen(highlightColor.lighter());
+        const QRectF innerRect = QRectF(option.rect).adjusted(0.5, 0.5, -0.5, -0.5);
+        painter->drawLine(innerRect.topLeft(), innerRect.topRight());
+        painter->setPen(highlightColor.darker());
+        painter->drawLine(innerRect.bottomLeft(), innerRect.bottomRight());
+    }
     painter->restore();
 }
 
diff --git a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
index 048a76033f92bbc1d32fbc31264c28eb8f2b3b0e..552a8ad18cf4e447439c70e60fa969dcc7d63f47 100644
--- a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
@@ -71,16 +71,10 @@ class QmlProfilerTraceView::QmlProfilerTraceViewPrivate
 public:
     QmlProfilerTraceViewPrivate(QmlProfilerTraceView *qq) : q(qq) {}
     QmlProfilerTraceView *q;
-
     QmlProfilerViewManager *m_viewContainer;
-
-    QSize m_sizeHint;
-
     QQuickWidget *m_mainView;
     QmlProfilerModelManager *m_modelManager;
     Timeline::TimelineModelAggregator *m_modelProxy;
-
-
     Timeline::TimelineZoomControl *m_zoomControl;
 };
 
diff --git a/src/plugins/qmlprofiler/qmlprofilerviewmanager.cpp b/src/plugins/qmlprofiler/qmlprofilerviewmanager.cpp
index 1c4a67e5b93574b15a7a66001ac2456eef13548d..22fb59934edbe1cbfa2b766427ce64f67a4dfd8f 100644
--- a/src/plugins/qmlprofiler/qmlprofilerviewmanager.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerviewmanager.cpp
@@ -34,7 +34,6 @@
 
 #include <coreplugin/icore.h>
 #include <utils/qtcassert.h>
-#include <utils/fancymainwindow.h>
 #include <debugger/analyzer/analyzermanager.h>
 #include <extensionsystem/pluginmanager.h>
 
@@ -81,8 +80,6 @@ void QmlProfilerViewManager::createViews()
     QTC_ASSERT(d->profilerModelManager, return);
     QTC_ASSERT(d->profilerState, return);
 
-    //Utils::FancyMainWindow *mw = Debugger::mainWindow();
-
     d->traceView = new QmlProfilerTraceView(0, this, d->profilerModelManager);
     d->traceView->setWindowTitle(tr("Timeline"));
     connect(d->traceView, &QmlProfilerTraceView::gotoSourceLocation,
@@ -103,11 +100,6 @@ void QmlProfilerViewManager::createViews()
     if (d->eventsViewFactory)
         d->eventsViews.append(d->eventsViewFactory->create(0, d->profilerModelManager));
 
-    // Clear settings if the new views aren't there yet. Otherwise we get glitches
-    QSettings *settings = Core::ICore::settings();
-    settings->beginGroup(QLatin1String("AnalyzerViewSettings_") +
-                         QLatin1String(QmlProfiler::Constants::QmlProfilerPerspectiveId));
-
     foreach (QmlProfilerEventsView *view, d->eventsViews) {
         connect(view, &QmlProfilerEventsView::typeSelected,
                 this, &QmlProfilerViewManager::typeSelected);
@@ -122,14 +114,9 @@ void QmlProfilerViewManager::createViews()
         QByteArray dockId = view->objectName().toLatin1();
         perspective.addOperation({dockId, view, Constants::QmlProfilerTimelineDockId, Perspective::AddToTab});
         new QmlProfilerStateWidget(d->profilerState, d->profilerModelManager, view);
-
-//        if (!settings->contains(view->parent()->objectName())) // parent() is QDockWidget.
-//            settings->remove(QString());
     }
     perspective.addOperation({Constants::QmlProfilerTimelineDockId, 0, {}, Perspective::Raise});
     Debugger::registerPerspective(Constants::QmlProfilerPerspectiveId, perspective);
-
-    settings->endGroup();
 }
 
 bool QmlProfilerViewManager::hasValidSelection() const
diff --git a/src/plugins/qnx/qnxtoolchain.cpp b/src/plugins/qnx/qnxtoolchain.cpp
index 9c0970618cf8f19004faae6f6ebd9c6a0d951812..3224521977110916115aff33e790bd5b9afcc66f 100644
--- a/src/plugins/qnx/qnxtoolchain.cpp
+++ b/src/plugins/qnx/qnxtoolchain.cpp
@@ -116,7 +116,7 @@ void QnxToolChain::setNdkPath(const QString &ndkPath)
 }
 
 // qcc doesn't support a "-dumpmachine" option to get supported abis
-QList<Abi> QnxToolChain::detectSupportedAbis() const
+GccToolChain::DetectedAbisResult QnxToolChain::detectSupportedAbis() const
 {
     return qccSupportedAbis();
 }
diff --git a/src/plugins/qnx/qnxtoolchain.h b/src/plugins/qnx/qnxtoolchain.h
index 8314b9f62f15734cf2ecad54b69cb7fc281d275d..193e7e36f8cbc2c28351d3e9a59d4f26f9445220 100644
--- a/src/plugins/qnx/qnxtoolchain.h
+++ b/src/plugins/qnx/qnxtoolchain.h
@@ -50,7 +50,7 @@ public:
     void setNdkPath(const QString &ndkPath);
 
 protected:
-    virtual QList<ProjectExplorer::Abi> detectSupportedAbis() const override;
+    virtual DetectedAbisResult detectSupportedAbis() const override;
 
     QStringList reinterpretOptions(const QStringList &args) const override;
 
diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp
index facac8a9c05a79c7c843828381dafacf9b352e1e..66d1e1f44571072563b63c1a8cbe529967b5e2b9 100644
--- a/src/plugins/texteditor/basefilefind.cpp
+++ b/src/plugins/texteditor/basefilefind.cpp
@@ -285,10 +285,11 @@ void BaseFileFind::writeCommonSettings(QSettings *settings)
 void BaseFileFind::readCommonSettings(QSettings *settings, const QString &defaultFilter)
 {
     QStringList filters = settings->value(QLatin1String("filters")).toStringList();
-    d->m_filterSetting = settings->value(QLatin1String("currentFilter")).toString();
+    const QVariant currentFilter = settings->value(QLatin1String("currentFilter"));
+    d->m_filterSetting = currentFilter.toString();
     if (filters.isEmpty())
         filters << defaultFilter;
-    if (d->m_filterSetting.isEmpty())
+    if (!currentFilter.isValid())
         d->m_filterSetting = filters.first();
     d->m_filterStrings.setStringList(filters);
     if (d->m_filterCombo)
diff --git a/src/plugins/texteditor/codeassist/assistinterface.cpp b/src/plugins/texteditor/codeassist/assistinterface.cpp
index 06e65d34d7eb0c9b33c869d0b3f5dd758f132f78..42670678895e8e4b3176fddd52e80cd53a7bb1cb 100644
--- a/src/plugins/texteditor/codeassist/assistinterface.cpp
+++ b/src/plugins/texteditor/codeassist/assistinterface.cpp
@@ -93,9 +93,12 @@ using namespace TextEditor;
 
 #include <texteditor/convenience.h>
 
+#include <QTextBlock>
 #include <QTextDocument>
 #include <QTextCursor>
 
+#include <utils/qtcassert.h>
+
 namespace TextEditor {
 
 AssistInterface::AssistInterface(QTextDocument *textDocument,
@@ -128,6 +131,9 @@ QString AssistInterface::textAt(int pos, int length) const
 void AssistInterface::prepareForAsyncUse()
 {
     m_text = m_textDocument->toPlainText();
+    m_userStates.reserve(m_textDocument->blockCount());
+    for (QTextBlock block = m_textDocument->firstBlock(); block.isValid(); block = block.next())
+        m_userStates.append(block.userState());
     m_textDocument = 0;
     m_isAsync = true;
 }
@@ -136,6 +142,11 @@ void AssistInterface::recreateTextDocument()
 {
     m_textDocument = new QTextDocument(m_text);
     m_text.clear();
+
+    QTC_CHECK(m_textDocument->blockCount() == m_userStates.count());
+    QTextBlock block = m_textDocument->firstBlock();
+    for (int i = 0; i < m_userStates.count() && block.isValid(); ++i, block = block.next())
+        block.setUserState(m_userStates[i]);
 }
 
 AssistReason AssistInterface::reason() const
diff --git a/src/plugins/texteditor/codeassist/assistinterface.h b/src/plugins/texteditor/codeassist/assistinterface.h
index 5daa611deea2bca9ca2162a1bd1b1dd53ab2ebc3..340713fc24494884b9ef14b2c413566579decf43 100644
--- a/src/plugins/texteditor/codeassist/assistinterface.h
+++ b/src/plugins/texteditor/codeassist/assistinterface.h
@@ -29,8 +29,8 @@
 
 #include <texteditor/texteditor_global.h>
 
-
 #include <QString>
+#include <QVector>
 
 QT_BEGIN_NAMESPACE
 class QTextDocument;
@@ -63,6 +63,7 @@ private:
     QString m_fileName;
     AssistReason m_reason;
     QString m_text;
+    QVector<int> m_userStates;
 };
 
 } // namespace TextEditor
diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp
index d13659146e2a7e34626211301bb43d6bb53b1bfd..246fe188830b824386ada849d048048ff5c89546 100644
--- a/src/plugins/valgrind/callgrindtool.cpp
+++ b/src/plugins/valgrind/callgrindtool.cpp
@@ -412,7 +412,6 @@ CallgrindTool::CallgrindTool(QObject *parent)
 
     // Cost formatting
     {
-    auto menu = new QMenu;
     auto group = new QActionGroup(this);
 
     // Show costs as absolute numbers
@@ -422,7 +421,6 @@ CallgrindTool::CallgrindTool(QObject *parent)
     m_costAbsolute->setChecked(true);
     connect(m_costAbsolute, &QAction::toggled, this, &CallgrindTool::updateCostFormat);
     group->addAction(m_costAbsolute);
-    menu->addAction(m_costAbsolute);
 
     // Show costs in percentages
     m_costRelative = new QAction(tr("Relative Costs"), this);
@@ -430,7 +428,6 @@ CallgrindTool::CallgrindTool(QObject *parent)
     m_costRelative->setCheckable(true);
     connect(m_costRelative, &QAction::toggled, this, &CallgrindTool::updateCostFormat);
     group->addAction(m_costRelative);
-    menu->addAction(m_costRelative);
 
     // Show costs relative to parent
     m_costRelativeToParent = new QAction(tr("Relative Costs to Parent"), this);
@@ -438,10 +435,9 @@ CallgrindTool::CallgrindTool(QObject *parent)
     m_costRelativeToParent->setCheckable(true);
     connect(m_costRelativeToParent, &QAction::toggled, this, &CallgrindTool::updateCostFormat);
     group->addAction(m_costRelativeToParent);
-    menu->addAction(m_costRelativeToParent);
 
     auto button = new QToolButton;
-    button->setMenu(menu);
+    button->addActions(group->actions());
     button->setPopupMode(QToolButton::InstantPopup);
     button->setText(QLatin1String("$"));
     button->setToolTip(tr("Cost Format"));
@@ -503,7 +499,6 @@ CallgrindTool::CallgrindTool(QObject *parent)
 CallgrindTool::~CallgrindTool()
 {
     qDeleteAll(m_textMarks);
-    doClear(false);
 }
 
 void CallgrindTool::slotGoToOverview()
diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp
index a0e4b539d1d8dabb702ca34e8640d520195db7e0..412418d2023c5f2bf08c06fb849af73139a1c885 100644
--- a/src/plugins/valgrind/memchecktool.cpp
+++ b/src/plugins/valgrind/memchecktool.cpp
@@ -249,8 +249,6 @@ class MemcheckTool : public QObject
 public:
     MemcheckTool(QObject *parent);
 
-    void createWidgets();
-
     MemcheckRunControl *createRunControl(ProjectExplorer::RunConfiguration *runConfiguration,
                                          Core::Id runMode);
 
diff --git a/src/shared/help/helpicons.h b/src/shared/help/helpicons.h
index cc9ea64df15b9e41d88c4c17f1ded0425b4be08a..f4406f031f904afd65b9d31f9927c9fa00c5cbd5 100644
--- a/src/shared/help/helpicons.h
+++ b/src/shared/help/helpicons.h
@@ -30,10 +30,10 @@
 namespace Help {
 namespace Icons {
 
-const Utils::Icon BOOKMARK(
-        QLatin1String(":/help/images/bookmark.png"));
-const Utils::Icon HOME(
-        QLatin1String(":/help/images/home.png"));
+const Utils::Icon BOOKMARK({
+        {QLatin1String(":/help/images/bookmark.png"), Utils::Theme::IconsBaseColor}});
+const Utils::Icon HOME({
+        {QLatin1String(":/help/images/home.png"), Utils::Theme::IconsBaseColor}});
 const Utils::Icon MODE_HELP_CLASSIC(
         QLatin1String(":/help/images/mode_help.png"));
 const Utils::Icon MODE_HELP_FLAT({
diff --git a/src/shared/qbs b/src/shared/qbs
index 0741b2c662babaeb19983259c659c52fb78bbfeb..ed37fd99438a2053d18b31ecd2366305bbc3ae03 160000
--- a/src/shared/qbs
+++ b/src/shared/qbs
@@ -1 +1 @@
-Subproject commit 0741b2c662babaeb19983259c659c52fb78bbfeb
+Subproject commit ed37fd99438a2053d18b31ecd2366305bbc3ae03
diff --git a/src/tools/clangbackend/ipcsource/clangtranslationunit.h b/src/tools/clangbackend/ipcsource/clangtranslationunit.h
index 893e469f097512e6d7bd964730adbc9456430ace..c4b25d53c5124678381224aebef3c144e0b9fecc 100644
--- a/src/tools/clangbackend/ipcsource/clangtranslationunit.h
+++ b/src/tools/clangbackend/ipcsource/clangtranslationunit.h
@@ -138,6 +138,8 @@ public:
 
     SkippedSourceRanges skippedSourceRanges() const;
 
+    static uint defaultOptions();
+
 private:
     void setDirty();
     void checkIfNull() const;
@@ -151,7 +153,6 @@ private:
     void reparseTranslationUnit() const;
     void reparseTranslationUnitIfFilesAreChanged() const;
     void updateIncludeFilePaths() const;
-    static uint defaultOptions();
     static void includeCallback(CXFile included_file,
                                 CXSourceLocation * /*inclusion_stack*/,
                                 unsigned /*include_len*/,
diff --git a/src/tools/clangbackend/ipcsource/codecompleter.cpp b/src/tools/clangbackend/ipcsource/codecompleter.cpp
index 691686d0479dc05d4a49647815e737405806990c..7381ac2d27f49841426098357ccb2826e07762ca 100644
--- a/src/tools/clangbackend/ipcsource/codecompleter.cpp
+++ b/src/tools/clangbackend/ipcsource/codecompleter.cpp
@@ -84,15 +84,13 @@ ClangCodeCompleteResults CodeCompleter::complete(uint line,
                                                  CXUnsavedFile *unsavedFiles,
                                                  unsigned unsavedFileCount)
 {
-    const auto options = CXCodeComplete_IncludeMacros | CXCodeComplete_IncludeCodePatterns;
-
     return clang_codeCompleteAt(translationUnit.cxTranslationUnitWithoutReparsing(),
                                 translationUnit.filePath().constData(),
                                 line,
                                 column,
                                 unsavedFiles,
                                 unsavedFileCount,
-                                options);
+                                defaultOptions());
 }
 
 bool CodeCompleter::hasDotAt(uint line, uint column) const
@@ -103,6 +101,17 @@ bool CodeCompleter::hasDotAt(uint line, uint column) const
     return unsavedFile.hasCharacterAt(location.offset(), '.');
 }
 
+uint CodeCompleter::defaultOptions() const
+{
+    uint options = CXCodeComplete_IncludeMacros
+                 | CXCodeComplete_IncludeCodePatterns;
+
+    if (translationUnit.defaultOptions() & CXTranslationUnit_IncludeBriefCommentsInCodeCompletion)
+        options |= CXCodeComplete_IncludeBriefComments;
+
+    return options;
+}
+
 ClangCodeCompleteResults CodeCompleter::completeWithArrowInsteadOfDot(uint line, uint column)
 {
     ClangCodeCompleteResults results;
diff --git a/src/tools/clangbackend/ipcsource/codecompleter.h b/src/tools/clangbackend/ipcsource/codecompleter.h
index 2139da926d6b0939d5e6cd815a851f6e7e29d2e1..313323a9d93dffb2e58a0a779885cb9ffd879042 100644
--- a/src/tools/clangbackend/ipcsource/codecompleter.h
+++ b/src/tools/clangbackend/ipcsource/codecompleter.h
@@ -49,6 +49,8 @@ public: // for tests
     bool hasDotAt(uint line, uint column) const;
 
 private:
+    uint defaultOptions() const;
+
     ClangCodeCompleteResults complete(uint line,
                                       uint column,
                                       CXUnsavedFile *unsavedFiles,
diff --git a/src/tools/cplusplus-keywordgen/cplusplus-keywordgen.cpp b/src/tools/cplusplus-keywordgen/cplusplus-keywordgen.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8219c390e9fa903a98e6c6f4d485e52fd1873f3c
--- /dev/null
+++ b/src/tools/cplusplus-keywordgen/cplusplus-keywordgen.cpp
@@ -0,0 +1,332 @@
+// Copyright (c) 2007 Roberto Raggi <roberto.raggi@gmail.com>
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of
+// this software and associated documentation files (the "Software"), to deal in
+// the Software without restriction, including without limitation the rights to
+// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+// the Software, and to permit persons to whom the Software is furnished to do so,
+// subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// ### TODO: Rewrite me.
+
+#include <string>
+#include <iostream>
+#include <map>
+#include <list>
+#include <vector>
+#include <set>
+#include <cstdlib>
+#include <cctype>
+#include <functional>
+#include <algorithm>
+
+class State;
+class DottedItem;
+
+typedef std::list<std::string> RuleList;
+typedef RuleList::iterator RulePtr;
+typedef std::list<State> StateList;
+typedef StateList::iterator StatePtr;
+typedef std::string::iterator Dot;
+typedef std::vector<DottedItem>::iterator DottedItemPtr;
+
+class DottedItem {
+public:
+  RulePtr rule;
+  Dot dot;
+
+  DottedItem() {}
+
+  DottedItem(RulePtr rule, Dot dot):
+    rule(rule), dot(dot) {}
+
+  bool operator == (const DottedItem &other) const {
+    return rule == other.rule && dot == other.dot;
+  }
+
+  bool operator != (const DottedItem &other) const {
+    return ! operator == (other);
+  }
+
+  bool terminal() const {
+    return dot == rule->end();
+  }
+
+  DottedItem next() const {
+    DottedItem item;
+    item.rule = rule;
+    item.dot = dot;
+    ++item.dot;
+    return item;
+  }
+};
+
+struct State {
+public:
+  State() {}
+
+  template <typename _ForwardIterator>
+  State(_ForwardIterator first, _ForwardIterator last) {
+    _items.insert(_items.end(), first, last);
+  }
+
+  static State &intern(const State &state) {
+    StatePtr ptr = std::find(first_state(), last_state(), state);
+    if (ptr == last_state())
+      ptr = states().insert(last_state(), state);
+    return *ptr;
+  }
+
+  State &next(char ch) {
+    std::vector<DottedItem> n;
+    for (DottedItemPtr it = first_item(); it != last_item(); ++it) {
+      if (! it->terminal() && *it->dot == ch)
+        n.push_back(it->next());
+    }
+    return intern(State(n.begin(), n.end()));
+  }
+
+  std::set<char> firsts() {
+    std::set<char> s;
+    for (DottedItemPtr it = first_item(); it != last_item(); ++it) {
+      if (! it->terminal())
+        s.insert(*it->dot);
+    }
+    return s;
+  }
+
+  size_t item_count() const { return _items.size(); }
+
+  DottedItemPtr first_item() { return _items.begin(); }
+  DottedItemPtr last_item() { return _items.end(); }
+
+  static StatePtr first_state() { return states().begin(); }
+  static StatePtr last_state() { return states().end(); }
+
+  bool operator == (const State &other) const { return _items == other._items; }
+  bool operator != (const State &other) const { return _items != other._items; }
+
+  template <typename _Iterator>
+  static State &start(_Iterator first, _Iterator last) {
+    std::vector<DottedItem> items;
+    for (; first != last; ++first)
+      items.push_back(DottedItem(first, first->begin()));
+    return intern(State(items.begin(), items.end()));
+  }
+
+  static void reset() {
+    states().clear();
+  }
+
+private:
+  static StateList &states() {
+    static StateList _states;
+    return _states;
+  }
+
+private:
+  std::vector<DottedItem> _items;
+};
+
+static bool option_no_enums = false;
+static bool option_toupper = false;
+static std::string option_namespace_name;
+static std::string option_token_prefix = "Token_";
+static std::string option_char_type = "char";
+static std::string option_unicode_function = "";
+
+std::string token_id(const std::string &id)
+{
+  std::string token = option_token_prefix;
+
+  if (! option_toupper)
+    token += id;
+  else {
+    for (size_t i = 0; i < id.size(); ++i)
+      token += toupper(id[i]);
+  }
+
+  return token;
+}
+
+bool starts_with(const std::string &line, const std::string &text) {
+  if (text.length() < line.length()) {
+    return std::equal(line.begin(), line.begin() + text.size(), text.begin());
+  }
+  return false;
+}
+
+void doit(State &state)
+{
+  static int depth{0};
+
+  ++depth;
+
+  std::string indent(depth * 2, ' ');
+
+  std::set<char> firsts = state.firsts();
+  for (std::set<char>::iterator it = firsts.begin(); it != firsts.end(); ++it) {
+    std::string _else = it == firsts.begin() ? "" : "else ";
+    std::cout << indent << _else << "if (s[" << (depth - 1) << "]" << option_unicode_function << " == '" << *it << "') {" << std::endl;
+    State &next_state = state.next(*it);
+
+    bool found = false;
+    for (DottedItemPtr item = next_state.first_item(); item != next_state.last_item(); ++item) {
+      if (item->terminal()) {
+	if (found) {
+	  std::cerr << "*** Error. Too many accepting states" << std::endl;
+	  exit(EXIT_FAILURE);
+	}
+	found = true;
+	std::cout << indent << "  return " << option_namespace_name << token_id(*item->rule) << ";" << std::endl;
+      }
+    }
+
+    if (! found)
+      doit(next_state);
+
+    std::cout << indent << "}" << std::endl;
+  }
+
+  --depth;
+}
+
+void gen_classify_n(State &start_state, int N)
+{
+  std::cout << "static inline int classify" << N << "(const " << option_char_type << " *s) {" << std::endl;
+  doit(start_state);
+  std::cout << "  return " << option_namespace_name << token_id("identifier") << ";" << std::endl
+            << "}" << std::endl << std::endl;
+}
+
+void gen_classify(const std::multimap<size_t, std::string> &keywords)
+{
+  std::cout << "int " << option_namespace_name << "classify(const " << option_char_type << " *s, int n) {" << std::endl
+            << "  switch (n) {" << std::endl;
+  std::multimap<size_t, std::string>::const_iterator it = keywords.begin();
+  while (it != keywords.end()) {
+    size_t size = it->first;
+    std::cout << "    case " << size << ": return classify" << size << "(s);" << std::endl;
+    do { ++it; } while (it != keywords.end() && it->first == size);
+  }
+  std::cout << "    default: return " << option_namespace_name << token_id("identifier") << ";" << std::endl
+            << "  } // switch" << std::endl
+            << "}" << std::endl << std::endl;
+}
+
+void gen_enums(const std::multimap<size_t, std::string> &keywords)
+{
+  std::cout << "enum {" << std::endl;
+  std::multimap<size_t, std::string>::const_iterator it = keywords.begin();
+  for (; it != keywords.end(); ++it) {
+    std::cout << "  " << token_id(it->second) << "," << std::endl;
+  }
+  std::cout << "  " << token_id("identifier") << std::endl
+            << "};" << std::endl << std::endl;
+}
+
+inline bool not_whitespace_p(char ch) {
+  return ! std::isspace(ch);
+}
+
+int main(int argc, char *argv[]) {
+  const std::string ns = "--namespace=";
+
+  for (int i = 0; i < argc; ++i) {
+    const std::string arg(argv[i]);
+    if (arg == "--no-enums")
+      option_no_enums = true;
+    else if (starts_with(arg, ns)) {
+      option_namespace_name.assign(arg.begin() + ns.size(), arg.end());
+      option_namespace_name += "::";
+    }
+  }
+
+  std::multimap<size_t, std::string> keywords;
+  std::string textline;
+
+  bool readKeywords = false;
+
+  const std::string opt_no_enums = "%no-enums";
+  const std::string opt_toupper = "%toupper";
+  const std::string opt_ns = "%namespace=";
+  const std::string opt_tok_prefix = "%token-prefix=";
+  const std::string opt_char_type = "%char-type=";
+  const std::string opt_unicode_function = "%unicode-function=";
+
+  while (getline(std::cin, textline)) {
+
+    // remove trailing spaces
+    textline.assign(textline.begin(), std::find_if(textline.rbegin(), textline.rend(), not_whitespace_p).base());
+
+    if (! readKeywords) {
+      if (textline.size() >= 2 && textline[0] == '%') {
+	if (textline[1] == '%') {
+	  readKeywords = true;
+	} else if (textline == opt_no_enums) {
+	  option_no_enums = true;
+	} else if (textline == opt_toupper) {
+	  option_toupper = true;
+	} else if (starts_with(textline, opt_tok_prefix)) {
+	  option_token_prefix.assign(textline.begin() + opt_tok_prefix.size(), textline.end());
+	} else if (starts_with(textline, opt_char_type)) {
+	  option_char_type.assign(textline.begin() + opt_char_type.size(), textline.end());
+	} else if (starts_with(textline, opt_unicode_function)) {
+	  option_unicode_function.assign(textline.begin() + opt_unicode_function.size(), textline.end());
+	} else if (starts_with(textline, opt_ns)) {
+	  option_namespace_name.assign(textline.begin() + opt_ns.size(), textline.end());
+	  option_namespace_name += "::";
+	}
+
+	continue;
+      }
+      std::cout << textline << std::endl;
+    } else {
+      if (textline.empty())
+	continue;
+
+      std::string::iterator start = textline.begin();
+      while (start != textline.end() && std::isspace(*start))
+	++start;
+
+      std::string::iterator stop = start;
+      while (stop != textline.end() && (std::isalnum(*stop) || *stop == '_'))
+	++stop;
+
+      if (start != stop) {
+	std::string keyword(start, stop);
+	if (keyword == "identifier") {
+	  std::cerr << "*** Error. `identifier' is reserved" << std::endl;
+	  exit(EXIT_FAILURE);
+	}
+
+	keywords.insert(std::make_pair(keyword.size(), keyword));
+      }
+    }
+  }
+
+  if (! option_no_enums)
+    gen_enums(keywords);
+
+  std::multimap<size_t, std::string>::iterator it = keywords.begin();
+  while (it != keywords.end()) {
+    size_t size = it->first;
+    RuleList rules;
+    do { rules.push_back(it->second); ++it; }
+    while (it != keywords.end() && it->first == size);
+    gen_classify_n(State::start(rules.begin(), rules.end()), size);
+    State::reset();
+  }
+
+  gen_classify(keywords);
+}
diff --git a/src/tools/cplusplus-keywordgen/cplusplus-keywordgen.pro b/src/tools/cplusplus-keywordgen/cplusplus-keywordgen.pro
new file mode 100644
index 0000000000000000000000000000000000000000..7d647775398b183f768d19a1af91bc078d69288c
--- /dev/null
+++ b/src/tools/cplusplus-keywordgen/cplusplus-keywordgen.pro
@@ -0,0 +1,3 @@
+include(../cplusplus-shared/tool.pri)
+
+SOURCES += cplusplus-keywordgen.cpp
diff --git a/src/tools/cplusplus-keywordgen/cplusplus-keywordgen.qbs b/src/tools/cplusplus-keywordgen/cplusplus-keywordgen.qbs
new file mode 100644
index 0000000000000000000000000000000000000000..a101414e2e15c2c56c6a612b8f7f4b9ff2e7330d
--- /dev/null
+++ b/src/tools/cplusplus-keywordgen/cplusplus-keywordgen.qbs
@@ -0,0 +1,7 @@
+import "../cplusplus-shared/CPlusPlusTool.qbs" as CPlusPlusTool
+
+CPlusPlusTool {
+    name: "cplusplus-keywordgen"
+
+    files: "cplusplus-keywordgen.cpp"
+}
diff --git a/src/tools/cplusplustools.qbs b/src/tools/cplusplustools.qbs
index fe2fc5cf161b0ce264005eee5ba85d161148d180..ee17e6baa63d64a2b2a78f2e240b36ed04755955 100644
--- a/src/tools/cplusplustools.qbs
+++ b/src/tools/cplusplustools.qbs
@@ -7,6 +7,7 @@ Project {
     references: [
         "cplusplus-ast2png/cplusplus-ast2png.qbs",
         "cplusplus-frontend/cplusplus-frontend.qbs",
+        "cplusplus-keywordgen/cplusplus-keywordgen.qbs",
         "cplusplus-mkvisitor/cplusplus-mkvisitor.qbs",
         "cplusplus-update-frontend/cplusplus-update-frontend.qbs",
     ]
diff --git a/src/tools/icons/export.py b/src/tools/icons/export.py
index 351942fb47a1e1643de0d71922f5a1e4cad8d4b1..6f1409971464b2892ba7a4e9c6e86d23553c6ee2 100644
--- a/src/tools/icons/export.py
+++ b/src/tools/icons/export.py
@@ -30,7 +30,7 @@
 # Each images is generated as normal and high resolution variant.
 # Each png file is afterwards optimized with optipng.
 
-import sys, os, subprocess, xml.etree.ElementTree as ET
+import sys, os, subprocess, re, xml.etree.ElementTree as ET
 from distutils import spawn
 
 scriptDir = os.path.dirname(os.path.abspath(sys.argv[0])) + '/'
@@ -39,6 +39,10 @@ scriptDir = os.path.dirname(os.path.abspath(sys.argv[0])) + '/'
 qtcSourceRoot = os.getenv('QTC_SRC', os.path.abspath(scriptDir + '../../..')) \
     .replace('\\', '/') + '/'
 
+svgElementFilter = ""
+if len(sys.argv) > 1:
+    svgElementFilter = sys.argv[1]
+
 # Inkscape is required by this script
 inkscapeExecutable = spawn.find_executable("inkscape")
 if not inkscapeExecutable:
@@ -55,7 +59,12 @@ for svgElement in svgTreeRoot.iter():
     try:
         svgElementID = svgElement.attrib['id']
         if svgElementID.startswith(('src/', 'share/')):
-            svgIDs.append(svgElementID)
+            if svgElementFilter != "":
+                pattern = re.compile(svgElementFilter)
+                if pattern.match(svgElementID):
+                    svgIDs.append(svgElementID)
+            else:
+                svgIDs.append(svgElementID)
     except:
         pass
 
diff --git a/src/tools/icons/qtcreatoricons.svg b/src/tools/icons/qtcreatoricons.svg
index d0708b3f25f8f36eb76aea8fe1c0853b3c18cd00..21bfa82a241e3182064a3447fb800b757c646379 100644
--- a/src/tools/icons/qtcreatoricons.svg
+++ b/src/tools/icons/qtcreatoricons.svg
@@ -2231,7 +2231,7 @@
          y="570" />
     </g>
     <g
-       id="src/plugins/coreplugin/images/run_overlay_small"
+       id="src/plugins/projectexplorer/images/run_overlay_small"
        transform="translate(-16,0)">
       <rect
          style="fill:#ffffff;fill-opacity:1;stroke:none"
@@ -2247,7 +2247,7 @@
          transform="matrix(1.3333333,0,0,1.125,-381.33331,283.75)" />
     </g>
     <g
-       id="src/plugins/coreplugin/images/stop_overlay_small"
+       id="src/plugins/debugger/images/stop_overlay_small"
        transform="translate(-16,0)">
       <rect
          style="fill:#ffffff;fill-opacity:1;stroke:none"
@@ -2265,7 +2265,7 @@
          style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
     </g>
     <g
-       id="src/plugins/coreplugin/images/interrupt_overlay_small"
+       id="src/plugins/debugger/images/interrupt_overlay_small"
        transform="translate(-16,0)">
       <rect
          style="fill:#ffffff;fill-opacity:1;stroke:none"
@@ -2290,7 +2290,7 @@
          y="575" />
     </g>
     <g
-       id="src/plugins/coreplugin/images/continue_overlay_small"
+       id="src/plugins/debugger/images/continue_overlay_small"
        transform="translate(16,0)">
       <rect
          id="rect4959-4-0-0-6-5"
@@ -2320,7 +2320,7 @@
          sodipodi:nodetypes="cccc" />
     </g>
     <g
-       id="src/plugins/coreplugin/images/debugger_overlay_small"
+       id="src/plugins/projectexplorer/images/debugger_overlay_small"
        transform="translate(16,0)">
       <rect
          style="fill:#ffffff;fill-opacity:1;stroke:none"
@@ -3077,6 +3077,48 @@
            height="100%" />
       </g>
     </g>
+    <g
+       id="src/plugins/help/images/home">
+      <rect
+         style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none"
+         width="16"
+         height="16"
+         x="936"
+         y="568"
+         id="rect4757-6" />
+      <polygon
+         style="fill:#000000;fill-opacity:1"
+         points="614,366.5 614,374 602,374 602,366.5 603,366.5 603,373 613,373 613,366.5 "
+         id="polygon5567-2"
+         transform="translate(336,208)" />
+      <rect
+         style="fill:#000000;fill-opacity:1"
+         x="943"
+         y="577"
+         width="2"
+         height="5"
+         id="rect5571-8" />
+      <polygon
+         style="fill:#000000;fill-opacity:1"
+         points="615,367.597 615,367.224 608,362 601,367.224 601,367.597 602.345,367.597 608,363.535 613.655,367.597 "
+         id="polygon5575-4"
+         transform="translate(336,208)" />
+    </g>
+    <g
+       id="src/plugins/help/images/bookmark">
+      <rect
+         id="rect6782-96"
+         height="16"
+         width="16"
+         y="568"
+         x="952"
+         style="fill:#ffffff;fill-opacity:1" />
+      <polygon
+         transform="translate(402,208)"
+         id="polygon6780-6"
+         points="555,374 555,362 561,362 561,374 558,370 "
+         style="fill:#000000;fill-opacity:1" />
+    </g>
   </g>
   <g
      inkscape:groupmode="layer"
diff --git a/src/tools/tools.pro b/src/tools/tools.pro
index be4170db1ae1c7b8177ab8dd3d7fcf3a4673da88..6e82be45c60182530f77432f28f8a71059de61b3 100644
--- a/src/tools/tools.pro
+++ b/src/tools/tools.pro
@@ -23,10 +23,11 @@ exists($$LLVM_INSTALL_DIR) {
     SUBDIRS += clangbackend
 }
 
-BUILD_CPLUSPLUS_TOOLS = $$(BUILD_CPLUSPLUS_TOOLS)
+isEmpty(BUILD_CPLUSPLUS_TOOLS):BUILD_CPLUSPLUS_TOOLS=$$(BUILD_CPLUSPLUS_TOOLS)
 !isEmpty(BUILD_CPLUSPLUS_TOOLS) {
     SUBDIRS += cplusplus-ast2png \
         cplusplus-frontend \
+        cplusplus-keywordgen \
         cplusplus-mkvisitor \
         cplusplus-update-frontend
 }
diff --git a/tests/auto/debugger/tst_offsets.cpp b/tests/auto/debugger/tst_offsets.cpp
index 545a7df5a7d19ec84e9cd4f623c97b5949295629..0886ec60e4f8fe8546aefad8de6c952aed84b31b 100644
--- a/tests/auto/debugger/tst_offsets.cpp
+++ b/tests/auto/debugger/tst_offsets.cpp
@@ -126,7 +126,7 @@ void tst_offsets::offsets_data()
             data << 164 << 248;
 #   endif
 #else
-            data << 156 << 248;
+            data << 164 << 248;
 #endif
         else if (qtVersion >= 0x50400)
 #ifdef Q_OS_WIN
diff --git a/tests/system/README b/tests/system/README
index 2ff437e743dcd0cca24083c545db3bf10b107acc..f7900deb13643c63024bae711f545ba1a2422b58 100644
--- a/tests/system/README
+++ b/tests/system/README
@@ -2,8 +2,7 @@ Prerequisites - general information
 -----------------------------------
 Squish tests inside this folder have several prerequisites to get them running.
 
-First - and most important - you have to own a valid Squish license. Currently it's recommended to use Squish 5.1.3.
-For Squish on Mac it's necessary to change the used Python version to 2.6 inside the <SQUISHDIR>/etc/paths.ini
+First - and most important - you have to own a valid Squish license. Currently it's recommended to use Squish 6.0.
 
 Second - some of the test suites/test cases expect an installed Qt 4 SDK in its default location.
 On Linux/Mac this is ~/QtSDK, and on Windows this is C:\QtSDK.
diff --git a/tests/system/objects.map b/tests/system/objects.map
index fc44e46139c4039ef577b9a5c07afb44b750fe88..9e491290e799832e1694dba1d9186f8c738a13f1 100644
--- a/tests/system/objects.map
+++ b/tests/system/objects.map
@@ -55,17 +55,18 @@
 :Core__Internal__GeneralSettings.User Interface_QGroupBox	{container=':qt_tabwidget_stackedwidget.Core__Internal__GeneralSettings_QWidget' name='interfaceBox' title='User Interface' type='QGroupBox' visible='1'}
 :CppTools__Internal__CompletionSettingsPage.Behavior_QGroupBox	{container=':qt_tabwidget_stackedwidget.CppTools__Internal__CompletionSettingsPage_QWidget' name='groupBox' title='Behavior' type='QGroupBox' visible='1'}
 :DebugModeWidget.Debugger Log_QDockWidget	{container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger.Docks.OutputDockWidget' type='QDockWidget' visible='1'}
-:DebugModeWidget.Debugger Toolbar_QDockWidget	{container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger Toolbar' type='QDockWidget' visible='1' windowTitle='Debugger Toolbar'}
 :DebugModeWidget.Debugger.Docks.BreakDockWidget_QDockWidget	{container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger.Docks.BreakDockWidget' type='QDockWidget' visible='1'}
-:DebugModeWidget.Locals and Expressions_QDockWidget	{container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger.Docks.LocalsAndWatchers' type='QDockWidget' visible='1' windowTitle='Locals and Expressions'}
+:DebugModeWidget.Debugger.Docks.LocalsAndWatchersDockWidget_QDockWidget	{container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger.Docks.LocalsAndWatchersDockWidget' type='QDockWidget' visible='1'}
 :DebugModeWidget.OK_QPushButton	{container=':Qt Creator.DebugModeWidget_QSplitter' text='OK' type='QPushButton' unnamed='1' visible='1'}
 :DebugModeWidget.Toolbar_QDockWidget	{container=':Qt Creator.DebugModeWidget_QSplitter' name='Toolbar' type='QDockWidget' visible='1'}
-:DebugModeWidget_QComboBox	{container=':Qt Creator.DebugModeWidget_QSplitter' occurrence='2' type='QComboBox' unnamed='1' visible='1'}
 :DebugModeWidget_Debugger::Internal::ConsoleView	{container=':Qt Creator.DebugModeWidget_QSplitter' type='Debugger::Internal::ConsoleView' unnamed='1' visible='1'}
+:DebugModeWidget_QComboBox	{container=':Qt Creator.DebugModeWidget_QSplitter' occurrence='2' type='QComboBox' unnamed='1' visible='1'}
 :Debugger Toolbar.Continue_QToolButton	{container=':DebugModeWidget.Toolbar_QDockWidget' text='Continue' type='QToolButton' unnamed='1' visible='1'}
-:Debugger Toolbar.Exit Debugger_QToolButton	{container=':DebugModeWidget.Debugger Toolbar_QDockWidget' text='Stop Debugger' type='QToolButton' unnamed='1' visible='1'}
+:Debugger Toolbar.Exit Debugger_QToolButton	{container=':DebugModeWidget.Toolbar_QDockWidget' text='Stop Debugger' type='QToolButton' unnamed='1' visible='1'}
 :Debugger Toolbar.StatusText_Utils::StatusLabel	{container=':DebugModeWidget.Toolbar_QDockWidget' type='Utils::StatusLabel' unnamed='1'}
 :Debugger.Docks.BreakDockWidget.Debugger.Docks.Break_QFrame	{container=':DebugModeWidget.Debugger.Docks.BreakDockWidget_QDockWidget' name='Debugger.Docks.Break' type='QFrame' visible='1'}
+:Debugger.Docks.LocalsAndWatchersDockWidget.Inspector_QFrame	{container=':DebugModeWidget.Debugger.Docks.LocalsAndWatchersDockWidget_QDockWidget' name='Inspector' type='QFrame' visible='1'}
+:Debugger::Internal::ConsoleEdit	{columnIndex='0' container=':DebugModeWidget_Debugger::Internal::ConsoleView' rowIndex='0' type='Debugger::Internal::ConsoleEdit' unnamed='1' visible='1'}
 :Description.description_Utils::CompletingTextEdit	{container=':splitter.Description_QGroupBox' name='description' type='Utils::CompletingTextEdit' visible='1'}
 :Dialog.OK_QPushButton	{text='OK' type='QPushButton' unnamed='1' visible='1' window=':Dialog_QmlJSEditor::Internal::ComponentNameDialog'}
 :Dialog.componentNameEdit_QLineEdit	{name='componentNameEdit' type='Utils::ClassNameValidatingLineEdit' visible='1' window=':Dialog_QmlJSEditor::Internal::ComponentNameDialog'}
@@ -99,7 +100,7 @@
 :Hits_QCLuceneResultWidget	{aboveWidget=':Hits_QLabel' type='QCLuceneResultWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
 :Hits_QLabel	{text~='\\\\d+ - \\\\d+ of \\\\d+ Hits' type='QLabel' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
 :Kits_QtVersion_QComboBox	{container=':qt_tabwidget_stackedwidget_QWidget' leftWidget=':QtVersionLabel_KitPage' type='QComboBox' unnamed='1' visible='1'}
-:Locals and Expressions_Debugger::Internal::WatchTreeView	{container=':DebugModeWidget.Locals and Expressions_QDockWidget' name='WatchWindow' type='Debugger::Internal::WatchTreeView' visible='1' windowTitle='Locals and Expressions'}
+:Locals and Expressions_Debugger::Internal::WatchTreeView	{container=':Debugger.Docks.LocalsAndWatchersDockWidget.Inspector_QFrame' name='WatchWindow' type='Debugger::Internal::WatchTreeView' visible='1'}
 :Minimal required Qt version:_QLabel	{text='Minimal required Qt version:' type='QLabel' unnamed='1' visible='1' window=':New Text File_ProjectExplorer::JsonWizard'}
 :New Text File.Add to project:_QLabel	{name='projectLabel' text='Add to project:' type='QLabel' visible='1' window=':New Text File_ProjectExplorer::JsonWizard'}
 :New Text File.nameLineEdit_Utils::FileNameValidatingLineEdit	{name='nameLineEdit' type='Utils::FileNameValidatingLineEdit' visible='1' window=':New Text File_ProjectExplorer::JsonWizard'}
@@ -119,7 +120,6 @@
 :Path.Utils_BaseValidatingLineEdit	{container=':qt_tabwidget_stackedwidget_QWidget' name='LineEdit' type='Utils::FancyLineEdit' visible='1'}
 :QML Debugging.No_QPushButton	{text='No' type='QPushButton' unnamed='1' visible='1' window=':QML Debugging_QMessageBox'}
 :QML Debugging_QMessageBox	{text='The option will only take effect if the project is recompiled. Do you want to recompile now?' type='QMessageBox' unnamed='1' visible='1'}
-:Debugger::Internal::ConsoleEdit	{columnIndex='0' container=':DebugModeWidget_Debugger::Internal::ConsoleView' rowIndex='0' type='Debugger::Internal::ConsoleEdit' unnamed='1' visible='1'}
 :Qt Creator.Add Bookmark_QToolButton	{text='Add Bookmark' type='QToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
 :Qt Creator.CloseDoc_QToolButton	{toolTip?='Close Document *' type='QToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
 :Qt Creator.CloseFind_QToolButton	{name='close' type='QToolButton' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
@@ -133,8 +133,6 @@
 :Qt Creator.Replace All_QToolButton	{name='replaceAllButton' text='Replace All' type='QToolButton' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
 :Qt Creator.Replace_QToolButton	{name='replaceButton' text='Replace' type='QToolButton' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
 :Qt Creator.Stop_QToolButton	{text='Stop' type='QToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
-:Qt Creator.WelcomePageStyledBar_QWindowContainer	{aboveWidget=':Qt Creator.WelcomePageStyledBar_Utils::StyledBar' type='QWindowContainer' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
-:Qt Creator.WelcomePageStyledBar_Utils::StyledBar	{name='WelcomePageStyledBar' type='Utils::StyledBar' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
 :Qt Creator.WelcomePage_QQuickWidget	{name='WelcomePage' type='QQuickWidget' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
 :Qt Creator.replaceEdit_Utils::FilterLineEdit	{name='replaceEdit' type='Utils::FancyLineEdit' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
 :Qt Creator.scrollArea_QScrollArea	{type='ProjectExplorer::PanelsWidget' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
@@ -202,7 +200,6 @@
 :Session Manager_ProjectExplorer::Internal::SessionDialog	{name='ProjectExplorer__Internal__SessionDialog' type='ProjectExplorer::Internal::SessionDialog' visible='1' windowTitle='Session Manager'}
 :Startup.contextHelpComboBox_QComboBox	{container=':Form.Startup_QGroupBox' name='contextHelpComboBox' type='QComboBox' visible='1'}
 :User Interface.languageBox_QComboBox	{container=':Core__Internal__GeneralSettings.User Interface_QGroupBox' name='languageBox' type='QComboBox' visible='1'}
-:WelcomePageStyledBar.WelcomePage_QQuickView	{container=':Qt Creator.WelcomePageStyledBar_QWindowContainer' name='WelcomePage' type='QQuickView' visible='true'}
 :Widget Box_qdesigner_internal::WidgetBoxTreeWidget	{container=':*Qt Creator.Widget Box_QDockWidget' type='qdesigner_internal::WidgetBoxTreeWidget' unnamed='1' visible='1'}
 :Working Copy_Utils::BaseValidatingLineEdit	{type='Utils::FancyLineEdit' unnamed='1' visible='1' window=':New Text File_ProjectExplorer::JsonWizard'}
 :WritePermissions_Core::Internal::ReadOnlyFilesDialog	{name='Core__Internal__ReadOnlyFilesDialog' type='Core::ReadOnlyFilesDialog' visible='1' windowTitle='Files Without Write Permissions'}
diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py
index d3515afb71f094f79458245760299350a78b4064..6cfda639cab9a2878c90a5d48f40f0fcbfc767f7 100644
--- a/tests/system/shared/project.py
+++ b/tests/system/shared/project.py
@@ -34,10 +34,7 @@ def openQbsProject(projectPath):
 def openQmakeProject(projectPath, targets=Targets.desktopTargetClasses(), fromWelcome=False):
     cleanUpUserFiles(projectPath)
     if fromWelcome:
-        if isQt54Build:
-            welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView"
-        else:
-            welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
+        welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
         mouseClick(waitForObject("{clip='false' container='%s' enabled='true' text='Open Project' "
                                  "type='Button' unnamed='1' visible='true'}" % welcomePage),
                    5, 5, 0, Qt.LeftButton)
@@ -87,10 +84,7 @@ def openCmakeProject(projectPath, buildDir):
 # this list can be used in __chooseTargets__()
 def __createProjectOrFileSelectType__(category, template, fromWelcome = False, isProject=True):
     if fromWelcome:
-        if isQt54Build:
-            welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView"
-        else:
-            welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
+        welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
         mouseClick(waitForObject("{clip='false' container='%s' enabled='true' text='New Project' "
                                  "type='Button' unnamed='1' visible='true'}" % welcomePage),
                    5, 5, 0, Qt.LeftButton)
diff --git a/tests/system/shared/qtcreator.py b/tests/system/shared/qtcreator.py
index 797235904f718709a81da25ac2a4068d3c9463d8..116826df391d01a4f9b39c1d836c176134afc52c 100644
--- a/tests/system/shared/qtcreator.py
+++ b/tests/system/shared/qtcreator.py
@@ -34,8 +34,6 @@ import sys
 import errno;
 from datetime import datetime,timedelta;
 
-isQt54Build = os.getenv("SYSTEST_ISQT54BUILD") != "0"
-
 srcPath = ''
 SettingsPath = ''
 tmpSettingsDir = ''
diff --git a/tests/system/suite_CSUP/tst_CSUP06/test.py b/tests/system/suite_CSUP/tst_CSUP06/test.py
index 34ab0c983519af9e7d8a0e587ecc9fb1c3d2bdbc..d721790e7e7ccdf39e3168602348971fc332718f 100644
--- a/tests/system/suite_CSUP/tst_CSUP06/test.py
+++ b/tests/system/suite_CSUP/tst_CSUP06/test.py
@@ -58,7 +58,7 @@ def performAutoCompletionTest(editor, lineToStartRegEx, linePrefix, testFunc, *f
         type(editor, bol)
         currentLine = moveDownToNextNonEmptyLine(editor)
 
-def checkIncludeCompletion(editor):
+def checkIncludeCompletion(editor, isClangCodeModel):
     test.log("Check auto-completion of include statements.")
     # define special handlings
     noProposal = ["vec", "detail/hea", "dum"]
@@ -76,8 +76,12 @@ def checkIncludeCompletion(editor):
         missing, noProposal, specialHandling = args
         inclSnippet = currentLine.split("//#include")[-1].strip().strip('<"')
         propShown = waitFor("object.exists(':popupFrame_TextEditor::GenericProposalWidget')", 2500)
-        test.compare(not propShown, inclSnippet in missing or inclSnippet in noProposal,
-                     "Proposal widget is (not) shown as expected (%s)" % inclSnippet)
+        if isClangCodeModel and inclSnippet in noProposal and JIRA.isBugStillOpen(15710):
+            test.xcompare(propShown, False, ("Proposal widget should not be shown for (%s) "
+                          "but because of QTCREATORBUG-15710 it currently is") % inclSnippet)
+        else:
+            test.compare(not propShown, inclSnippet in missing or inclSnippet in noProposal,
+                         "Proposal widget is (not) shown as expected (%s)" % inclSnippet)
         if propShown:
             proposalListView = waitForObject(':popupFrame_Proposal_QListView')
             if inclSnippet in specialHandling:
@@ -127,8 +131,12 @@ def checkSymbolCompletion(editor, isClangCodeModel):
         if isClangCodeModel and JIRA.isBugStillOpen(15639):
             timeout = 5000
         propShown = waitFor("object.exists(':popupFrame_TextEditor::GenericProposalWidget')", timeout)
-        test.compare(not propShown, symbol in missing,
-                     "Proposal widget is (not) shown as expected (%s)" % symbol)
+        if isClangCodeModel and symbol in missing and not "(" in symbol and JIRA.isBugStillOpen(15710):
+            test.xcompare(propShown, False, ("Proposal widget should not be shown for (%s) "
+                          "but because of QTCREATORBUG-15710 it currently is") % symbol)
+        else:
+            test.compare(not propShown, symbol in missing,
+                         "Proposal widget is (not) shown as expected (%s)" % symbol)
         found = []
         if propShown:
             proposalListView = waitForObject(':popupFrame_Proposal_QListView')
@@ -173,7 +181,7 @@ def main():
             return
         editor = getEditorForFileSuffix("main.cpp")
         if editor:
-            checkIncludeCompletion(editor)
+            checkIncludeCompletion(editor, useClang)
             checkSymbolCompletion(editor, useClang)
             invokeMenuItem('File', 'Revert "main.cpp" to Saved')
             clickButton(waitForObject(":Revert to Saved.Proceed_QPushButton"))
diff --git a/tests/system/suite_WELP/tst_WELP01/test.py b/tests/system/suite_WELP/tst_WELP01/test.py
index 69f99419ea20bd0ce65725441d2a277fa0cfd1ca..c752c65b1cca7a38f0b533bc38e1336e242a25e7 100755
--- a/tests/system/suite_WELP/tst_WELP01/test.py
+++ b/tests/system/suite_WELP/tst_WELP01/test.py
@@ -26,10 +26,7 @@
 source("../../shared/qtcreator.py")
 source("../../shared/suites_qtta.py")
 
-if isQt54Build:
-    welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView"
-else:
-    welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
+welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
 gettingStartedText = getQmlItem("Button", welcomePage, False,
                                 "text='Get Started Now' id='gettingStartedButton'")
 
@@ -83,11 +80,10 @@ def main():
     textUrls = {'Online Community':'http://forum.qt.io',
                 'Blogs':'http://planet.qt.io',
                 'Qt Account':'https://account.qt.io',
-                'Qt Cloud Services':'https://developer.qtcloudservices.com',
                 'User Guide':'qthelp://org.qt-project.qtcreator/doc/index.html'
                 }
     for text, url in textUrls.items():
-        qmlItem = getQmlItem("LinkedText", welcomePage, False, "text='%s'" % text)
+        qmlItem = getQmlItem("Text", welcomePage, False, "text='%s'" % text)
         if test.verify(checkIfObjectExists(qmlItem),
                        "Verifying: Link to %s exists." % text):
             itemObj = findObject(qmlItem)
diff --git a/tests/system/suite_WELP/tst_WELP02/test.py b/tests/system/suite_WELP/tst_WELP02/test.py
index 0dcc5aaf7805104bb9ac5197271b70c46dfc9dd4..17aacc64978227662e9c9958918de8993e979a10 100644
--- a/tests/system/suite_WELP/tst_WELP02/test.py
+++ b/tests/system/suite_WELP/tst_WELP02/test.py
@@ -26,10 +26,7 @@
 source("../../shared/qtcreator.py")
 source("../../shared/suites_qtta.py")
 
-if isQt54Build:
-    welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView"
-else:
-    welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
+welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
 
 def checkTypeAndProperties(typePropertiesDetails):
     for (qType, props, detail) in typePropertiesDetails:
@@ -53,7 +50,7 @@ def main():
     typePropDet = (("Button", "text='Get Started Now' id='gettingStartedButton'",
                     "Get Started Now button"),
                    ("Text", "text='Sessions' id='sessionsTitle'", "Sessions section"),
-                    ("Text", "text='default' id='text'", "default session listed"),
+                    ("Text", "text='default'", "default session listed"),
                    ("Text", "text='Recent Projects' id='recentProjectsTitle'", "Projects section"),
                    )
     checkTypeAndProperties(typePropDet)
@@ -66,10 +63,10 @@ def main():
     # go to "Welcome page" again and verify updated information
     switchViewTo(ViewConstants.WELCOME)
     typePropDet = (("Text", "text='Sessions' id='sessionsTitle'", "Sessions section"),
-                   ("Text", "text='default (current session)' id='text'",
+                   ("Text", "text='default (current session)'",
                     "default session as current listed"),
                    ("Text", "text='Recent Projects' id='recentProjectsTitle'", "Projects section"),
-                   ("LinkedText", "text='SampleApp' id='projectNameText'",
+                   ("Text", "text='SampleApp'",
                     "current project listed in projects section")
                    )
     checkTypeAndProperties(typePropDet)
@@ -83,10 +80,10 @@ def main():
                 "Verifying: The project is opened in 'Edit' mode after configuring.")
     # go to "Welcome page" again and check if there is an information about recent projects
     switchViewTo(ViewConstants.WELCOME)
-    test.verify(checkIfObjectExists(getQmlItem("LinkedText", welcomePage, False,
-                                               "text='propertyanimation' id='projectNameText'")) and
-                checkIfObjectExists(getQmlItem("LinkedText", welcomePage, False,
-                                               "text='SampleApp' id='projectNameText'")),
+    test.verify(checkIfObjectExists(getQmlItem("Text", welcomePage, False,
+                                               "text='propertyanimation'")) and
+                checkIfObjectExists(getQmlItem("Text", welcomePage, False,
+                                               "text='SampleApp'")),
                 "Verifying: 'Welcome page' displays information about recently created and "
                 "opened projects.")
     # exit Qt Creator
diff --git a/tests/system/suite_WELP/tst_WELP03/test.py b/tests/system/suite_WELP/tst_WELP03/test.py
index 8baa26b6356923339d142a46d164f65518a810db..724397cb9a8336bc1f92110f0625fa0e8e3d128a 100644
--- a/tests/system/suite_WELP/tst_WELP03/test.py
+++ b/tests/system/suite_WELP/tst_WELP03/test.py
@@ -45,10 +45,7 @@ def main():
         test.log("Welcome mode is not scriptable with this Squish version")
         return
     global sdkPath
-    if isQt54Build:
-        welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView"
-    else:
-        welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
+    welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
     # open Qt Creator
     startApplication("qtcreator" + SettingsPath)
     if not startedWithoutPluginError():
diff --git a/tests/system/suite_WELP/tst_WELP04/test.py b/tests/system/suite_WELP/tst_WELP04/test.py
index 97e0794d2d31681b3429c2ffde2cf51b0448e2d3..7b185aa70e298e7eed942524f9fced7cc9a6e70a 100644
--- a/tests/system/suite_WELP/tst_WELP04/test.py
+++ b/tests/system/suite_WELP/tst_WELP04/test.py
@@ -30,10 +30,7 @@ def main():
     if not canTestEmbeddedQtQuick():
         test.log("Welcome mode is not scriptable with this Squish version")
         return
-    if isQt54Build:
-        welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView"
-    else:
-        welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
+    welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
     # open Qt Creator
     startApplication("qtcreator" + SettingsPath)
     if not startedWithoutPluginError():
diff --git a/tests/system/suite_general/tst_session_handling/test.py b/tests/system/suite_general/tst_session_handling/test.py
index 89500e720e7fc14957db5f5b48ace017721e44df..0290baafb917d12b3124fe12f60afa7552aefe73 100644
--- a/tests/system/suite_general/tst_session_handling/test.py
+++ b/tests/system/suite_general/tst_session_handling/test.py
@@ -106,10 +106,7 @@ def createAndSwitchToSession(toSession):
                               "window=%s}" % sessionInputDialog))
 
 def checkWelcomePage(sessionName, isCurrent=False):
-    if isQt54Build:
-        welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView"
-    else:
-        welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
+    welcomePage = ":Qt Creator.WelcomePage_QQuickWidget"
     switchViewTo(ViewConstants.WELCOME)
     mouseClick(waitForObject("{container='%s' text='Projects' type='Button' "
                              "unnamed='1' visible='true'}" % welcomePage))
@@ -120,7 +117,7 @@ def checkWelcomePage(sessionName, isCurrent=False):
     else:
         sessions = ["default (current session)", sessionName]
     for sessionName in sessions:
-        test.verify(object.exists("{container='%s' enabled='true' type='LinkedText' unnamed='1' "
+        test.verify(object.exists("{container='%s' enabled='true' type='Text' unnamed='1' "
                                   "visible='true' text='%s'}" % (welcomePage, sessionName)),
                                   "Verifying session '%s' exists." % sessionName)