diff --git a/dist/gdb/Makefile.linux b/dist/gdb/Makefile.linux
index f12d25eaf8f436bec7a9718a80e691c6a101c8ee..94bf99bca9aea68dde3ada993be661564e8df127 100644
--- a/dist/gdb/Makefile.linux
+++ b/dist/gdb/Makefile.linux
@@ -1,6 +1,6 @@
 broot=${PWD}
 source=${broot}/source
-targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi arm-none-symbianelf
+targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi
 staging=${broot}/staging
 pyversion=2.7
 expatversion=2.0.1
diff --git a/dist/gdb/Makefile.mingw b/dist/gdb/Makefile.mingw
index 4d36fa67bd24de54ca49640f9d161307fe357576..acc8a841739c51ce1906cbefc9317c029cf64ab9 100644
--- a/dist/gdb/Makefile.mingw
+++ b/dist/gdb/Makefile.mingw
@@ -1,6 +1,6 @@
 broot=${PWD}
 source=${broot}/source
-targets=arm-none-symbianelf arm-none-linux-gnueabi i686-pc-mingw32
+targets=arm-none-linux-gnueabi i686-pc-mingw32
 staging=${broot}/staging
 pyversion=2.7
 pydir=${broot}/python
diff --git a/dist/gdb/Makefile.osx b/dist/gdb/Makefile.osx
index e73a9624346d8ae5d7ef49c7ba49f4f23c477024..20517d01ea18606986967f35335b90303e333d9d 100644
--- a/dist/gdb/Makefile.osx
+++ b/dist/gdb/Makefile.osx
@@ -1,6 +1,6 @@
 broot=${PWD}
 source=${broot}/source
-targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi arm-none-symbianelf x86_64-apple-darwin10
+targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi x86_64-apple-darwin10
 staging=${broot}/staging
 pyversion=2.7
 expatversion=2.0.1
diff --git a/dist/installer/ifw/config/config.xml.in b/dist/installer/ifw/config/config.xml.in
new file mode 100644
index 0000000000000000000000000000000000000000..39fe7f4f00f915016a44a6f2223d12db24795ad9
--- /dev/null
+++ b/dist/installer/ifw/config/config.xml.in
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<Installer>
+    <Name>Qt Creator</Name>
+    <Version>{version}</Version>
+    <Title>Qt Creator</Title>
+    <MaintenanceTitle>Qt Creator Maintenance</MaintenanceTitle>
+    <Publisher>Qt Project</Publisher>
+    <ProductUrl>http://qt-project.org</ProductUrl>
+
+    <Icon>logo.png</Icon>
+    <Watermark>watermark.png</Watermark>
+    <UninstallerName>QtCreatorUninstaller</UninstallerName>
+    <!-- @homeDir@ and @rootDir@ are some of the supported vars -->
+    <TargetDir>@homeDir@/QtCreator</TargetDir>
+    <AdminTargetDir>/opt/QtCreator</AdminTargetDir>
+
+    <Pages>
+      <Page name="LicenseAgreementPage">
+        <AcceptLicenseLabel>I have read and understood the terms contained in the above license agreements.</AcceptLicenseLabel>
+        <RejectLicenseLabel>I do not accept the terms contained in the above license agreements.</RejectLicenseLabel>
+      </Page>
+    </Pages>
+
+</Installer>
diff --git a/dist/installer/ifw/config/logo.png b/dist/installer/ifw/config/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..d892f85fe2c11f273bc66774fad74c3deeddb989
Binary files /dev/null and b/dist/installer/ifw/config/logo.png differ
diff --git a/dist/installer/ifw/config/watermark.png b/dist/installer/ifw/config/watermark.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc44c44f4c651679158c733d9e5a8a0c4319cd57
Binary files /dev/null and b/dist/installer/ifw/config/watermark.png differ
diff --git a/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/installscript.qs b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/installscript.qs
new file mode 100644
index 0000000000000000000000000000000000000000..33436bbbb166d4c35dcafc5ed52f8f97110dbec7
--- /dev/null
+++ b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/installscript.qs
@@ -0,0 +1,155 @@
+/* This file is part of the Qt SDK
+
+Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
+All rights reserved.
+
+Contact:  Nokia Corporation (qt-info@nokia.com)
+
+GNU Lesser General Public License Usage
+This file may be used under the terms of the GNU Lesser General Public
+License version 2.1 as published by the Free Software Foundation and
+appearing in the file LICENSE.LGPL included in the packaging of this file.
+Please review the following information to ensure the GNU Lesser General
+Public License version 2.1 requirements will be met:
+http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+
+If you have questions regarding the use of this file, please contact Nokia
+at qt-info@nokia.com.
+*/
+
+// constructor
+function Component()
+{
+    installer.finishButtonClicked.connect(this, Component.prototype.installationFinished);
+}
+
+Component.prototype.beginInstallation = function()
+{
+    if ( installer.value("os") === "win" ) {
+        component.setStopProcessForUpdateRequest("@TargetDir@/bin/qtcreator.exe", true);
+        component.setStopProcessForUpdateRequest("@TargetDir@/bin/linguist.exe", true);
+        component.setStopProcessForUpdateRequest("@TargetDir@/bin/qmlviewer.exe", true);
+    }
+}
+
+registerWindowsFileTypeExtensions = function()
+{
+    var headerExtensions = new Array("h", "hh", "hxx", "h++", "hpp", "hpp");
+
+    for (var i = 0; i < headerExtensions.length; ++i) {
+        component.addOperation( "RegisterFileType",
+                                headerExtensions[i],
+                                "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+                                "C++ Header file",
+                                "",
+                                "@TargetDir@\\bin\\qtcreator.exe,3");
+    }
+
+    var cppExtensions = new Array("cc", "cxx", "c++", "cp", "cpp");
+
+    for (var i = 0; i < cppExtensions.length; ++i) {
+        component.addOperation( "RegisterFileType",
+                                cppExtensions[i],
+                                "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+                                "C++ Source file",
+                                "",
+                                "@TargetDir@\\bin\\qtcreator.exe,2");
+    }
+
+    component.addOperation( "RegisterFileType",
+                            "c",
+                            "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+                            "C Source file",
+                            "",
+                            "@TargetDir@\\bin\\qtcreator.exe,1");
+    component.addOperation( "RegisterFileType",
+                            "ui",
+                            "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+                            "Qt UI file",
+                            "",
+                            "@TargetDir@\\bin\\qtcreator.exe,4");
+    component.addOperation( "RegisterFileType",
+                            "pro",
+                            "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+                            "Qt Project file",
+                            "",
+                            "@TargetDir@\\bin\\qtcreator.exe,5");
+    component.addOperation( "RegisterFileType",
+                            "pri",
+                            "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+                            "Qt Project Include file",
+                            "",
+                            "@TargetDir@\\bin\\qtcreator.exe,6");
+    component.addOperation( "RegisterFileType",
+                            "qs",
+                            "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+                            "Qt Script file",
+                            "",
+                            "@TargetDir@\\bin\\qtcreator.exe,0");
+    component.addOperation( "RegisterFileType",
+                            "qml",
+                            "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+                            "Qt Quick Markup language file",
+                            "",
+                            "@TargetDir@\\bin\\qtcreator.exe,0");
+}
+
+Component.prototype.createOperations = function()
+{
+    // Call the base createOperations and afterwards set some registry settings
+    component.createOperations();
+    if ( installer.value("os") == "win" )
+    {
+        component.addOperation( "SetPluginPathOnQtCore",
+                                "@TargetDir@/bin",
+                                "@TargetDir@/plugins");
+        component.addOperation( "SetImportsPathOnQtCore",
+                                "@TargetDir@/bin",
+                                "@TargetDir@/bin");
+        component.addOperation( "CreateShortcut",
+                                "@TargetDir@\\\bin\\qtcreator.exe",
+                                "@StartMenuDir@/Qt Creator.lnk",
+                                "workingDirectory=@homeDir@" );
+        registerWindowsFileTypeExtensions();
+    }
+    if ( installer.value("os") == "x11" )
+    {
+        component.addOperation( "SetPluginPathOnQtCore",
+                                "@TargetDir@/lib/qtcreator",
+                                "@TargetDir@/lib/qtcreator/plugins");
+        component.addOperation( "SetImportsPathOnQtCore",
+                                "@TargetDir@/lib/qtcreator",
+                                "@TargetDir@/bin");
+
+        component.addOperation( "InstallIcons", "@TargetDir@/share/icons" );
+        component.addOperation( "CreateDesktopEntry",
+                                "QtProject-qtcreator.desktop",
+                                "Type=Application\nExec=@TargetDir@/bin/qtcreator\nPath=@TargetDir@\nName=Qt Creator\nGenericName=The IDE of choice for Qt development.\nGenericName[de]=Die IDE der Wahl zur Qt Entwicklung\nIcon=QtProject-qtcreator\nTerminal=false\nCategories=Development;IDE;Qt;\nMimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.nokia.qt.qmakeprofile;application/vnd.nokia.xml.qt.resource;text/x-qml;"
+                                );
+    }
+}
+
+Component.prototype.installationFinished = function()
+{
+    try {
+        if (component.installed && installer.isInstaller() && installer.status == QInstaller.Success) {
+            var isLaunchQtCreatorCheckBoxChecked = component.userInterface( "LaunchQtCreatorCheckBoxForm" ).launchQtCreatorCheckBox.checked;
+            if (isLaunchQtCreatorCheckBoxChecked) {
+
+                var qtCreatorBinary = installer.value("TargetDir");
+                if (installer.value("os") == "win")
+                    qtCreatorBinary = qtCreatorBinary + "\\bin\\qtcreator.exe";
+                else if (installer.value("os") == "x11")
+                    qtCreatorBinary = qtCreatorBinary + "/bin/qtcreator";
+                else if (installer.value("os") == "mac")
+                    qtCreatorBinary = "\"" + qtCreatorBinary + "/Qt Creator.app/Contents/MacOS/Qt Creator\"";
+
+                if (installer.executeDetached)
+                    installer.executeDetached(qtCreatorBinary);
+            }
+        }
+    } catch(e) {
+        print(e);
+    }
+}
+
diff --git a/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/license.txt b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/license.txt
new file mode 100644
index 0000000000000000000000000000000000000000..602bfc94635ddf8f1bf2b00419a85ead645a5b67
--- /dev/null
+++ b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/license.txt
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/package.xml.in b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/package.xml.in
new file mode 100644
index 0000000000000000000000000000000000000000..ed2cf104c989e21e9fbed2e15a434489ba07ccd6
--- /dev/null
+++ b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/package.xml.in
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<Package>
+    <DisplayName>Qt Creator Application</DisplayName>
+    <Description>The IDE of choice for Qt development.</Description>
+    <Version>{version}</Version>
+    <ReleaseDate>{date}</ReleaseDate>
+    <Name>org.qtproject.qtcreator.application</Name>
+    <Script>installscript.qs</Script>
+    <Licenses>
+        <License name="Qt Creator License" file="license.txt" />
+    </Licenses>
+    <ForcedInstallation>true</ForcedInstallation>
+    <Default>true</Default>
+    <AutoDependOn>org.qtproject.qtcreator</AutoDependOn>
+</Package>
diff --git a/dist/installer/ifw/packages/org.qtproject.qtcreator/meta/package.xml.in b/dist/installer/ifw/packages/org.qtproject.qtcreator/meta/package.xml.in
new file mode 100644
index 0000000000000000000000000000000000000000..122ca71cad40670a72fb6c524848918ea0e25c12
--- /dev/null
+++ b/dist/installer/ifw/packages/org.qtproject.qtcreator/meta/package.xml.in
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<Package>
+  <DisplayName>Qt Creator</DisplayName>
+  <Description>Installs the Qt Creator IDE.</Description>
+  <Version>{version}</Version>
+  <ReleaseDate>{date}</ReleaseDate>
+  <Name>org.qtproject.qtcreator</Name>
+  <!--  <Script>installscript.js</Script> -->
+</Package>
diff --git a/doc/images/qmldesigner-new-project.png b/doc/images/qmldesigner-new-project.png
index ac8e4e15058ddb44b93fda989b98db4e5ebcb937..acbbc37893871dc24789c10337d01450f3c70ce8 100644
Binary files a/doc/images/qmldesigner-new-project.png and b/doc/images/qmldesigner-new-project.png differ
diff --git a/doc/images/qtcreator-new-qt-quick-project-wizard.png b/doc/images/qtcreator-new-qt-quick-project-wizard.png
index 9c318c9390019883b1c6cf74d1acb74ab3a5485d..1bd69f05642777a7c42c27d0e7e27837c2a9defb 100644
Binary files a/doc/images/qtcreator-new-qt-quick-project-wizard.png and b/doc/images/qtcreator-new-qt-quick-project-wizard.png differ
diff --git a/doc/src/howto/creator-vcs.qdoc b/doc/src/howto/creator-vcs.qdoc
index 337a45ca77d371616a33bd541c92b4d16707d343..2ec977a99291905eb78950bd9d4716733faf2651 100644
--- a/doc/src/howto/creator-vcs.qdoc
+++ b/doc/src/howto/creator-vcs.qdoc
@@ -41,6 +41,10 @@
             \o  Bazaar
             \o  \l{http://bazaar.canonical.com/}
             \o  \QC 2.2 and later
+        \row
+            \o  ClearCase
+            \o  \l{http://www-01.ibm.com/software/awdtools/clearcase/}
+            \i  Experimental plugin in \QC 2.6
         \row
             \o  CVS
             \o  \l{http://www.cvshome.org}
@@ -304,7 +308,45 @@
 
     \endtable
 
-    \section2 Using Additional CVS Functions
+    \section2 Using Additional ClearCase Functions
+
+    IBM Rational ClearCase is a version control, workspace management, parallel
+    development support, and build automation solution developed by IBM. The
+    ClearCase client plugin is an experimental plugin that you can enable by
+    selecting \gui Help > \gui {About Plugins} > \gui {Version Control} >
+    \gui ClearCase. The ClearCase client plugin is available on Linux and
+    Windows for accessing a ClearCase server.
+
+    The \gui ClearCase submenu contains the following additional items:
+
+    \table
+        \header
+            \o  Menu Item
+            \o  Description
+        \row
+            \o  \gui{Check In}
+            \o  Create a permanent new version of the current file or all files
+                in the versioned object base (VOB).
+        \row
+            \o  \gui{Check In Activity}
+            \o  Check in checked-out versions in the change set of the current
+                Unified Change Management (UCM) activity.
+        \row
+            \o  \gui{Check Out}
+            \o  Create a writable copy of a branch. If you check out files in a
+                UCM view, they are added to the change set of the UCM activity.
+        \row
+            \o  \gui{Undo Check Out}
+            \o  Cancel the checkout for a file and delete the checked-out
+                version.
+        \row
+            \o  \gui{Undo Hijack}
+            \o  Resolve hijacked files. If you change the read-only attribute of
+                a file that is loaded into a snapshot view and modify the file
+                without checking it out, you \e hijack the file.
+    \endtable
+
+\section2 Using Additional CVS Functions
 
     CVS is an open source version control system.
 
diff --git a/doc/src/projects/creator-projects-creating.qdoc b/doc/src/projects/creator-projects-creating.qdoc
index e28850ea927d6527e949ab4a1a148de3d7f7d9f2..211a129df7999a6b4fe50e1a9233bb0c620ecd97 100644
--- a/doc/src/projects/creator-projects-creating.qdoc
+++ b/doc/src/projects/creator-projects-creating.qdoc
@@ -116,9 +116,10 @@
 
             \o  Qt Quick Application (Built-in Elements)
 
-                Use built-in QML elements to design Qt Quick based user
-                interfaces with a custom look and feel and QML and C++ code to
-                implement the application logic
+                Use built-in QML elements to design user interfaces based on
+                Qt Quick 1 (Qt 4.7.1, or later) or Qt Quick 2 (Qt 5) with a
+                custom look and feel and QML and C++ code to implement the
+                application logic
 
             \o  Qt Quick Application for MeeGo Harmattan
 
diff --git a/doc/src/qtquick/qtquick-creating.qdoc b/doc/src/qtquick/qtquick-creating.qdoc
index 27d87db53ae33d9e2377a8537e56d6b685295448..80763000a400d8a1fdc4aa012667365b046bd511 100644
--- a/doc/src/qtquick/qtquick-creating.qdoc
+++ b/doc/src/qtquick/qtquick-creating.qdoc
@@ -50,6 +50,14 @@
             custom look and feel, whereas the components provide the look and
             feel for a particular platform.
 
+            The Qt Quick 1 Application wizard imports Qt Quick 1.1, and
+            therefore, you can use it without changes to develop for platforms
+            that run Qt 4.7.4 (such as MeeGo). To develop for platforms that run
+            Qt 4.7.3 (such as Maemo), you must change the import statement to
+            import Qt Quick 1.0.
+
+            The Qt Quick 2 Application wizard imports Qt Quick 2.0. Use it to
+            develop for platforms that run Qt 5.
         \o  \gui {Qt Quick UI} creates a Qt Quick UI project with a single QML
             file that contains the main view. You can review Qt Quick UI
             projects in the QML Viewer and you need not build them. You do not
@@ -68,16 +76,6 @@
 
     \endlist
 
-    \if defined(qcmanual)
-    \note Qt 4.7.3 supports Qt Quick 1.0 and Qt 4.7.4 supports Qt Quick 1.1. The
-    application wizards import Qt Quick 1.1, and therefore, you can use them
-    without changes if you target only platforms that run Qt 4.7.4 (such as
-    MeeGo or the desktop). If you also target platforms that run Qt 4.7.3
-    (such as Maemo), you must change the import statement to
-    import Qt Quick 1.0.
-    \endif
-
-
     \section1 Creating Qt Quick UI Projects
 
     \list 1
diff --git a/qtcreator.pro b/qtcreator.pro
index 4720d20b0edda8b5e3c6fe474c494344b17ad2ed..c1e5fa0014b1d9e72bde7c2db47ee8edccc93f57 100644
--- a/qtcreator.pro
+++ b/qtcreator.pro
@@ -27,6 +27,7 @@ PATTERN = $${PLATFORM}$(INSTALL_EDITION)-$${QTCREATOR_VERSION}$(INSTALL_POSTFIX)
 macx {
     APPBUNDLE = "$$OUT_PWD/bin/Qt Creator.app"
     BINDIST_SOURCE = "$$OUT_PWD/bin/Qt Creator.app"
+    BINDIST_INSTALLER_SOURCE = $$BINDIST_SOURCE
     deployqt.commands = $$PWD/scripts/deployqtHelper_mac.sh \"$${APPBUNDLE}\"
     codesign.commands = codesign -s \"$(SIGNING_IDENTITY)\" \"$${APPBUNDLE}\"
     dmg.commands = $$PWD/scripts/makedmg.sh $$OUT_PWD/bin qt-creator-$${PATTERN}.dmg
@@ -34,6 +35,7 @@ macx {
     QMAKE_EXTRA_TARGETS += codesign dmg
 } else {
     BINDIST_SOURCE = "$(INSTALL_ROOT)$$QTC_PREFIX"
+    BINDIST_INSTALLER_SOURCE = "$$BINDIST_SOURCE/*"
     deployqt.commands = $$PWD/scripts/deployqt.py -i \"$(INSTALL_ROOT)$$QTC_PREFIX\"
     deployqt.depends = install
     win32 {
@@ -43,13 +45,20 @@ macx {
     }
 }
 
+INSTALLER_ARCHIVE = $$OUT_PWD/qt-creator-$${PATTERN}-installer-archive.7z
+
+bindist.depends = deployqt
 bindist.commands = 7z a -mx9 $$OUT_PWD/qt-creator-$${PATTERN}.7z \"$$BINDIST_SOURCE\"
+bindist_installer.depends = deployqt
+bindist_installer.commands = 7z a -mx9 $$OUT_PWD/qt-creator-$${PATTERN}-installer-archive.7z \"$$BINDIST_INSTALLER_SOURCE\"
+installer.depends = bindist_installer
+installer.commands = $$PWD/scripts/packageIfw.py -i \"$(IFW_PATH)\" -v $${QTCREATOR_VERSION} -a \"$$INSTALLER_ARCHIVE\" "qt-creator-$${PATTERN}-installer"
 
 win32 {
     deployqt.commands ~= s,/,\\\\,g
     bindist.commands ~= s,/,\\\\,g
+    bindist_installer.commands ~= s,/,\\\\,g
+    installer.commands ~= s,/,\\\\,g
 }
 
-bindist.depends = deployqt
-
-QMAKE_EXTRA_TARGETS += deployqt bindist
+QMAKE_EXTRA_TARGETS += deployqt bindist bindist_installer installer
diff --git a/scripts/packageIfw.py b/scripts/packageIfw.py
new file mode 100755
index 0000000000000000000000000000000000000000..b78cb548f280f8b475eec681f761ce9dddd940ff
--- /dev/null
+++ b/scripts/packageIfw.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+################################################################################
+# Copyright (c) 2011 Nokia Corporation
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#   * Redistributions of source code must retain the above copyright notice,
+#     this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright notice,
+#     this list of conditions and the following disclaimer in the documentation
+#     and/or other materials provided with the distribution.
+#   * Neither the name of Nokia Corporation, nor the names of its contributors
+#     may be used to endorse or promote products derived from this software
+#     without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+################################################################################
+
+import os
+import sys
+import datetime
+import getopt
+import subprocess
+import fnmatch
+import tempfile
+import shutil
+import inspect
+
+def usage():
+    print 'Usage: %s [-v|--version-string=versionstring] [-i|--installer-path=/path/to/installerfw] [-a|--archive=archive.7z] <outputname>' %  os.path.basename(sys.argv[0])
+
+def substitute_file(infile, outfile, substitutions):
+    with open(infile, 'r') as f:
+      template = f.read()
+    with open(outfile, 'w') as f:
+      f.write(template.format(**substitutions))
+
+def ifw_template_dir():
+    script_dir = os.path.dirname(inspect.getfile(inspect.currentframe()))
+    source_dir = os.path.normpath(os.path.join(script_dir, '..'));
+    return os.path.normpath(os.path.join(source_dir, 'dist', 'installer', 'ifw'))
+
+def main():
+    try:
+        opts, args = getopt.gnu_getopt(sys.argv[1:], 'hv:i:a:', ['help', 'version-string=', 'installer-path=', 'archive'])
+    except:
+        usage()
+        sys.exit(2)
+
+    if len(args) < 1:
+        usage()
+        sys.exit(2)
+
+    version = ''
+    ifw_location = ''
+    archive = ''
+    for o, a in opts:
+        if o in ('-h', '--help'):
+            usage()
+            sys.exit(0)
+        if o in ('-v', '--version-string'):
+            version = a
+        if o in ('-i', '--installer-path'):
+            ifw_location = a
+        if o in ('-a', '--archive'):
+            archive = a
+
+    if (version == ''):
+      raise Exception('Version not specified (--version-string)!')
+
+    if (ifw_location == ''):
+      raise Exception('Installer framework location not specified (--installer-path)!')
+
+    if (archive == ''):
+      raise Exception('Archive not specified (--archive)!')
+
+    installer_name = args[0]
+    if sys.platform == 'darwin':
+        installer_name = installer_name + '.dmg'
+
+    try:
+        temp_dir = tempfile.mkdtemp()
+    except:
+        raise Exception('Failed to create a temporary directory!')
+
+    try:
+        substs = {}
+        substs['version'] = version
+        substs['date'] = datetime.date.today().isoformat()
+
+        template_dir = ifw_template_dir()
+        out_config_dir = os.path.join(temp_dir,'config')
+        out_packages_dir = os.path.join(temp_dir, 'packages')
+
+        shutil.copytree(os.path.join(template_dir, 'packages'), os.path.join(temp_dir, 'packages'))
+        shutil.copytree(os.path.join(template_dir, 'config'), os.path.join(temp_dir, 'config'))
+
+        for root, dirnames, filenames in os.walk(out_packages_dir):
+            for template in fnmatch.filter(filenames, '*.in'):
+                substitute_file(os.path.join(root, template), os.path.join(root, template[:-3]), substs)
+                os.remove(os.path.join(root, template))
+
+        for root, dirnames, filenames in os.walk(out_config_dir):
+            for template in fnmatch.filter(filenames, '*.in'):
+                substitute_file(os.path.join(root, template), os.path.join(root, template[:-3]), substs)
+                os.remove(os.path.join(root, template))
+
+        data_path = os.path.join(out_packages_dir, 'org.qtproject.qtcreator.application', 'data')
+        if not os.path.exists(data_path):
+            os.makedirs(data_path)
+        shutil.copy(archive, data_path)
+
+        ifw_call = [os.path.join(ifw_location, 'bin', 'binarycreator'), '-c', os.path.join(out_config_dir, 'config.xml'), '-p', out_packages_dir, installer_name, '--offline-only' ]
+        subprocess.check_call(ifw_call, stderr=subprocess.STDOUT)
+    finally:
+        print 'Cleaning up...'
+        shutil.rmtree(temp_dir)
+        print 'Done.'
+
+if __name__ == '__main__':
+    main()
diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts
index 8f4b74be1139b425001b8c03a8df1937b123cc6b..91a1e313f355db21295393895d3f73758f79c547 100644
--- a/share/qtcreator/translations/qtcreator_de.ts
+++ b/share/qtcreator/translations/qtcreator_de.ts
@@ -7416,10 +7416,6 @@ Fehler: %2</translation>
         <source>Run</source>
         <translation>Ausführen</translation>
     </message>
-    <message>
-        <source>No executable</source>
-        <translation>Keine ausführbare Datei</translation>
-    </message>
 </context>
 <context>
     <name>ProjectExplorer::Internal::ProcessStep</name>
@@ -12253,10 +12249,6 @@ Sie können die Änderungen in einem Stash ablegen oder zurücksetzen.</translat
         <source>There are no changes to commit.</source>
         <translation>Es sind keine ausstehenden Änderungen vorhanden.</translation>
     </message>
-    <message>
-        <source>Unable to generate a temporary file for the commit editor.</source>
-        <translation>Es konnte keine temporäre Datei für die Abgabe angelegt werden.</translation>
-    </message>
     <message>
         <source>Unable to create an editor for the commit.</source>
         <translation>Es konnte kein Editor für die Abgabe angelegt werden.</translation>
@@ -13279,6 +13271,14 @@ Sie können die Änderungen in einem Stash ablegen oder zurücksetzen.</translat
         <source>File &apos;%1&apos; does not exist or is not readable.</source>
         <translation>Die Datei &apos;%1&apos; existiert nicht oder ist nicht lesbar.</translation>
     </message>
+    <message>
+        <source>Device type is not desktop.</source>
+        <translation>Der Gerätetyp ist nicht &quot;Desktop&quot;.</translation>
+    </message>
+    <message>
+        <source>No Qt version set in kit.</source>
+        <translation>Im Kit ist keine Qt-Version gesetzt.</translation>
+    </message>
 </context>
 <context>
     <name>QmlProjectManager::Internal::QmlProjectApplicationWizardDialog</name>
@@ -13570,6 +13570,10 @@ Erfordert &lt;b&gt;Qt 4.7.4&lt;/b&gt; oder neuer.</translation>
         <source>Evaluating</source>
         <translation>Auswertung</translation>
     </message>
+    <message>
+        <source>No Qt version set in kit.</source>
+        <translation>Im Kit ist keine Qt-Version gesetzt.</translation>
+    </message>
     <message>
         <source>The .pro file &apos;%1&apos; does not exist.</source>
         <translation>Die .pro-Datei &apos;%1&apos; existiert nicht.</translation>
@@ -18813,10 +18817,6 @@ Lokale Pull-Operationen werden nicht auf den Master-Branch angewandt.</translati
         <source>There are no changes to commit.</source>
         <translation>Es sind keine ausstehenden Änderungen vorhanden.</translation>
     </message>
-    <message>
-        <source>Unable to generate a temporary file for the commit editor.</source>
-        <translation>Es konnte keine temporäre Datei für die Abgabe angelegt werden.</translation>
-    </message>
     <message>
         <source>Unable to create an editor for the commit.</source>
         <translation>Es konnte kein Editor für die Abgabe angelegt werden.</translation>
@@ -19730,6 +19730,10 @@ Fehler: %2</translation>
         <source>Kit Selection</source>
         <translation>Kit-Auswahl</translation>
     </message>
+    <message>
+        <source>%1 - temporary</source>
+        <translation>%1 - temporär</translation>
+    </message>
     <message>
         <source>Qt Creator can use the following kits for project &lt;b&gt;%1&lt;/b&gt;:</source>
         <comment>%1: Project name</comment>
@@ -20245,7 +20249,7 @@ Bei vollständiger Cache-Simulation werden weitere Ereigniszähler aktiviert:
         <translation>Globale Bus-Ereignisse aufnehmen</translation>
     </message>
     <message>
-        <source>Visualisation: Minimum event cost:</source>
+        <source>Visualization: Minimum event cost:</source>
         <translation>Minimale Ereigniskosten für Visualisierung:</translation>
     </message>
 </context>
@@ -21327,10 +21331,22 @@ Bitte verwenden Sie den Stop-Button.</translation>
         <source>Debugging Helper Build Log for &apos;%1&apos;</source>
         <translation>Erstellungsprotokoll der Ausgabe-Hilfsbibliothek für &apos;%1&apos;</translation>
     </message>
+    <message>
+        <source>Select a qmake Executable</source>
+        <translation>Wählen Sie die ausführbare qmake-Datei aus</translation>
+    </message>
+    <message>
+        <source>Qt Version Already Registered</source>
+        <translation>Qt-Version bereits registriert</translation>
+    </message>
     <message>
         <source>Select a qmake executable</source>
         <translation>Wählen Sie die ausführbare qmake-Datei aus</translation>
     </message>
+    <message>
+        <source>This Qt version was already registered as &quot;%1&quot;.</source>
+        <translation>Diese Qt-Version ist bereits unter &quot;%1&quot; registriert.</translation>
+    </message>
     <message>
         <source>Helpers: None available</source>
         <translation>Hilfskomponenten: Keine verfügbar</translation>
@@ -26030,11 +26046,11 @@ should a repository require SSH-authentication (see documentation on SSH and the
         <translation>IDE-Überblick</translation>
     </message>
     <message>
-        <source>To find out what kind of integrated enviroment (IDE) Qt Creator is.</source>
+        <source>To find out what kind of integrated environment (IDE) Qt Creator is.</source>
         <translation>Um herauszufinden, um welche Art von integrierter Entwicklungsumgebung es sich bei Qt Creator handelt.</translation>
     </message>
     <message>
-        <source>To become familar with the parts of the Qt Creator user interface and to learn how to use them.</source>
+        <source>To become familiar with the parts of the Qt Creator user interface and to learn how to use them.</source>
         <translation>Um sich mit den Teilen der Benutzeroberfläche von Qt Creator vertraut zu machen und ihre Bedienung zu erlernen.</translation>
     </message>
     <message>
@@ -26815,8 +26831,8 @@ Möchten Sie es beenden?</translation>
 <context>
     <name>QmlProfiler::Internal::QmlProfilerEventsWidget</name>
     <message>
-        <source>Trace information from the v8 JavaScript engine. Available only in Qt5 based applications</source>
-        <translation>Trace-Information vom v8 JavaScript-Engine. Nur in Qt-5 basierten Anwendungen verfügbar</translation>
+        <source>Trace information from the v8 JavaScript engine. Available only in Qt5 based applications.</source>
+        <translation>Trace-Information vom v8 JavaScript-Engine. Nur in Qt-5 basierten Anwendungen verfügbar.</translation>
     </message>
     <message>
         <source>Copy Row</source>
@@ -26898,13 +26914,13 @@ Möchten Sie es beenden?</translation>
         <translation>Das Binding wird von der optimierten Engine ausgewertet.</translation>
     </message>
     <message>
-        <source>Binding not optimized (eg. has side effects or assignments,
+        <source>Binding not optimized (e.g. has side effects or assignments,
 references to elements in other files, loops, etc.)</source>
         <translation>Das Binding ist nicht optimiert (d.h., es hat Seiteneffekte oder Zuweisungen, Referenzen zu Elementen in anderen Dateien, Schleifen, etc.)</translation>
     </message>
     <message>
-        <source>Binding loop detected</source>
-        <translation>Endlosschleife bei Binding festgestellt</translation>
+        <source>Binding loop detected.</source>
+        <translation>Endlosschleife bei Binding festgestellt.</translation>
     </message>
     <message utf8="true">
         <source> µs</source>
@@ -26942,8 +26958,8 @@ references to elements in other files, loops, etc.)</source>
 <context>
     <name>QmlProfiler::Internal::QmlProfilerEventsParentsAndChildrenView</name>
     <message>
-        <source>Part of binding loop</source>
-        <translation>Teil der Binding-Endlosschleife</translation>
+        <source>Part of binding loop.</source>
+        <translation>Teil der Binding-Schleife.</translation>
     </message>
     <message>
         <source>Callee</source>
@@ -27035,28 +27051,28 @@ references to elements in other files, loops, etc.)</source>
         <translation>AvahiZConfLib c konnte die native Bibliothek &apos;%1&apos; nicht laden: %2</translation>
     </message>
     <message>
-        <source>%1 could not create a client (probably the daemon is not running)</source>
-        <translation>%1 konnte keinen Client erzeugen (möglicherweise läuft kein Hintergrundprozess)</translation>
+        <source>%1 cannot create a client. The daemon is probably not running.</source>
+        <translation>%1 konnte keinen Client erzeugen (möglicherweise läuft kein Hintergrundprozess).</translation>
     </message>
     <message>
-        <source>cAvahiClient, server collision</source>
-        <translation>cAvahiClient, Server-Kollision</translation>
+        <source>cAvahiClient, server collision.</source>
+        <translation>cAvahiClient, Server-Kollision.</translation>
     </message>
     <message>
-        <source>cAvahiClient, some kind of error happened on the client side</source>
-        <translation>cAvahiClient, client-seitiger Fehler</translation>
+        <source>cAvahiClient, an error occurred on the client side.</source>
+        <translation>cAvahiClient, client-seitiger Fehler.</translation>
     </message>
     <message>
-        <source>cAvahiClient, still connecting, no server available</source>
-        <translation>cAvahiClient, versuche Verbindung herzustellen, es ist kein Server verfügbar</translation>
+        <source>cAvahiClient, still connecting, no server available.</source>
+        <translation>cAvahiClient, versuche Verbindung herzustellen, es ist kein Server verfügbar.</translation>
     </message>
     <message>
-        <source>unexpected state %1 in cAvahiClientReply</source>
-        <translation>unerwarteter Status %1 in cAvahiClientReply</translation>
+        <source>Unexpected state %1 in cAvahiClientReply.</source>
+        <translation>Unerwarteter Status %1 in cAvahiClientReply.</translation>
     </message>
     <message>
-        <source>unexpected state %1 in cAvahiBrowseReply</source>
-        <translation>unerwarteter Status %1 in cAvahiBrowseReply</translation>
+        <source>Unexpected state %1 in cAvahiBrowseReply.</source>
+        <translation>Unerwarteter Status %1 in cAvahiBrowseReply.</translation>
     </message>
     <message>
         <source>%1 failed to kill other daemons with &apos;%2&apos;.</source>
@@ -27168,8 +27184,8 @@ references to elements in other files, loops, etc.)</source>
 <context>
     <name>Debugger::Internal::QmlV8DebuggerClient</name>
     <message>
-        <source>anonymous function</source>
-        <translation>anonyme Funktion</translation>
+        <source>Anonymous Function</source>
+        <translation>Anonyme Funktion</translation>
     </message>
 </context>
 <context>
@@ -27179,7 +27195,7 @@ references to elements in other files, loops, etc.)</source>
         <translation>Offene Dokumente</translation>
     </message>
     <message>
-        <source>Open Documents:</source>
+        <source>Open documents:</source>
         <translation>Offene Dokumente:</translation>
     </message>
     <message>
@@ -27422,6 +27438,10 @@ references to elements in other files, loops, etc.)</source>
 </context>
 <context>
     <name>BinEditorDocument</name>
+    <message>
+        <source>The Binary Editor can not open empty files.</source>
+        <translation>Der Binäreditor kann keine leeren Dateien öffnen.</translation>
+    </message>
     <message>
         <source>Cannot open %1: %2</source>
         <translation>Die Datei %1 kann nicht geöffnet werden: %2</translation>
@@ -27687,24 +27707,24 @@ references to elements in other files, loops, etc.)</source>
         <translation>Name der privaten Schlüsseldatei auswählen</translation>
     </message>
     <message>
-        <source>Failure To Save Key File</source>
-        <translation>Fehler beim Speichern der Schlüsseldatei</translation>
+        <source>Cannot Save Key File</source>
+        <translation>Schlüsseldatei kann nicht gespeichert werden</translation>
     </message>
     <message>
-        <source>Failed to create directory: &apos;%1&apos;.</source>
-        <translation>Der Ordner &apos;%1&apos; konnte nicht erstellt werden.</translation>
+        <source>Cannot Save Private Key File</source>
+        <translation>Die private Schlüsseldatei kann nicht gespeichert werden</translation>
     </message>
     <message>
-        <source>Saving Private Key File failed</source>
-        <translation>Das Speichern des privaten Schlüssels schlug fehl</translation>
+        <source>Cannot Save Public Key File</source>
+        <translation>Öffentliche Schlüsseldatei kann nicht gespeichert werden</translation>
     </message>
     <message>
-        <source>The private key file could not be saved: %1</source>
-        <translation>Die private Schlüsseldatei konnte nicht gespeichert werden: %1</translation>
+        <source>Failed to create directory: &apos;%1&apos;.</source>
+        <translation>Der Ordner &apos;%1&apos; konnte nicht erstellt werden.</translation>
     </message>
     <message>
-        <source>Saving Public Key File failed</source>
-        <translation>Das Speichern des öffentlichen Schlüssels schlug fehl</translation>
+        <source>The private key file could not be saved: %1</source>
+        <translation>Die private Schlüsseldatei konnte nicht gespeichert werden: %1</translation>
     </message>
     <message>
         <source>The public key file could not be saved: %1</source>
@@ -27788,14 +27808,6 @@ references to elements in other files, loops, etc.)</source>
         <source>Organization (e.g. KDE):</source>
         <translation>Organisation (z.B. KDE):</translation>
     </message>
-    <message>
-        <source>City or Locality:</source>
-        <translation>Stadt:</translation>
-    </message>
-    <message>
-        <source>State or Province:</source>
-        <translation>Staat oder Provinz:</translation>
-    </message>
     <message>
         <source>Two-letter country code for this unit (e.g. RO):</source>
         <translation>Länderkennung für die Einheit (2 Buchstaben, z.B. RO):</translation>
@@ -27812,6 +27824,14 @@ references to elements in other files, loops, etc.)</source>
         <source>Certificate Distinguished Names</source>
         <translation>Namen des Zertifikats</translation>
     </message>
+    <message>
+        <source>City or locality:</source>
+        <translation>Stadt:</translation>
+    </message>
+    <message>
+        <source>State or province:</source>
+        <translation>Bundesland oder Provinz:</translation>
+    </message>
 </context>
 <context>
     <name>AndroidDeployStepWidget</name>
@@ -27819,18 +27839,6 @@ references to elements in other files, loops, etc.)</source>
         <source>Form</source>
         <translation>Form</translation>
     </message>
-    <message>
-        <source>Edit rules file</source>
-        <translation>Regeldatei bearbeiten</translation>
-    </message>
-    <message>
-        <source>Choose apk</source>
-        <translation>Apk wählen</translation>
-    </message>
-    <message>
-        <source>Install Ministro system wide Qt shared libraries installer</source>
-        <translation>Installiere Ministro system wide Qt shared libraries installer</translation>
-    </message>
     <message>
         <source>Choose and install Ministro system wide Qt shared libraries.
 This option is useful when you want to try your application on devices which don&apos;t have Android Market (e.g. Android Emulator).</source>
@@ -27859,6 +27867,18 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
         <source>Use local Qt libraries</source>
         <translation>Lokale Qt-Bibliotheken ausliefern</translation>
     </message>
+    <message>
+        <source>Edit Rules File</source>
+        <translation>Regeldatei bearbeiten</translation>
+    </message>
+    <message>
+        <source>Install Ministro, system-wide Qt shared libraries installer</source>
+        <translation>Installiere Ministro (systemweiter Installer für Qt shared libraries)</translation>
+    </message>
+    <message>
+        <source>Choose APK</source>
+        <translation>APK wählen</translation>
+    </message>
 </context>
 <context>
     <name>AndroidPackageCreationWidget</name>
@@ -28022,30 +28042,14 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
         <source>Android NDK location:</source>
         <translation>Android-NDK:</translation>
     </message>
-    <message>
-        <source>Android NDK toolchain version:</source>
-        <translation>Toolchain-Version des Android NDK:</translation>
-    </message>
     <message>
         <source>Ant location:</source>
         <translation>ant:</translation>
     </message>
-    <message>
-        <source>arm GDB location:</source>
-        <translation>arm GDB:</translation>
-    </message>
-    <message>
-        <source>arm GDBserver location:</source>
-        <translation>arm GDBserver:</translation>
-    </message>
     <message>
         <source>x86 GDB location:</source>
         <translation>x86 GDB:</translation>
     </message>
-    <message>
-        <source>x86 GDBserver location:</source>
-        <translation>x86 GDBserver:</translation>
-    </message>
     <message>
         <source>OpenJDK location:</source>
         <translation>OpenJDK:</translation>
@@ -28078,6 +28082,22 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
         <source>Remove</source>
         <translation>Entfernen</translation>
     </message>
+    <message>
+        <source>Android NDK tool chain version:</source>
+        <translation>Toolchain-Version des Android NDK:</translation>
+    </message>
+    <message>
+        <source>ARM GDB location:</source>
+        <translation>ARM GDB:</translation>
+    </message>
+    <message>
+        <source>ARM GDB server location:</source>
+        <translation>ARM GDB-Server:</translation>
+    </message>
+    <message>
+        <source>x86 GDB server location:</source>
+        <translation>x86 GDB-Server:</translation>
+    </message>
 </context>
 <context>
     <name>Core::RemoveFileDialog</name>
@@ -28403,8 +28423,8 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
 <context>
     <name>QSsh::Internal::SftpChannelPrivate</name>
     <message>
-        <source>Server could not start sftp subsystem.</source>
-        <translation>Der Server konnte das sftp-Subsystem nicht starten.</translation>
+        <source>Server could not start SFTP subsystem.</source>
+        <translation>Der Server konnte das SFTP-Subsystem nicht starten.</translation>
     </message>
     <message>
         <source>Unexpected packet of type %1.</source>
@@ -28523,13 +28543,32 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
         <source>Botan library exception: %1</source>
         <translation>Ausnahmefehler in der Botan-Bibliothek: %1</translation>
     </message>
+    <message numerus="yes">
+        <source>Server identification string is %n characters long, but the maximum allowed length is 255.</source>
+        <translation>
+            <numerusform>Die Zeichenkette zur Identifikation des Servers ist ein Zeichen lang, die maximal zulässige Länge ist aber 255.</numerusform>
+            <numerusform>Die Zeichenkette zur Identifikation des Servers ist %n Zeichen lang, die maximal zulässige Länge ist aber 255.</numerusform>
+        </translation>
+    </message>
     <message>
-        <source>Invalid protocol version: Expected &apos;2.0&apos;, got &apos;%1&apos;.</source>
-        <translation>Die Versionen des Protokolls stimmen nicht überein: Erwartet &apos;2.0&apos;, erhalten %1.</translation>
+        <source>Server identification string contains illegal NUL character.</source>
+        <translation>Die Zeichenkette zur Identifikation des Servers enthält ein unzulässiges NUL-Zeichen.</translation>
     </message>
     <message>
-        <source>Invalid server id &apos;%1&apos;.</source>
-        <translation>Ungültige Server-Kennzeichnung &apos;%1&apos;.</translation>
+        <source>Server Identification string &apos;%1&apos; is invalid.</source>
+        <translation>Die Zeichenkette &apos;%1&apos; zur Identifikation des Servers ist ungültig.</translation>
+    </message>
+    <message>
+        <source>Server protocol version is &apos;%1&apos;, but needs to be 2.0 or 1.99.</source>
+        <translation>Die Version des Serverprotokolls ist &apos;%1&apos;, erforderlich ist jedoch 2.0 oder 1.99.</translation>
+    </message>
+    <message>
+        <source>Server identification string is invalid (missing carriage return).</source>
+        <translation>Die Zeichenkette zur Identifikation des Servers ist ungültig (es fehlt der Zeilenvorschub).</translation>
+    </message>
+    <message>
+        <source>Server reports protocol version 1.99, but sends data before the identification string, which is not allowed.</source>
+        <translation>Der Server gibt Protokollversion 1.99 an, sendet aber Daten vor der Zeichenkette zur Identifikation, was nicht gestattet ist.</translation>
     </message>
     <message>
         <source>Unexpected packet of type %1.</source>
@@ -28631,7 +28670,7 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
         <translation>Fehler beim Erstellen von AVD</translation>
     </message>
     <message>
-        <source>Cannot create a new AVD, no sufficiently recent Android SDK available.
+        <source>Cannot create a new AVD. No sufficiently recent Android SDK available.
 Please install an SDK of at least API version %1.</source>
         <translation>Es konnte kein AVD erzeugt werden, da kein hinreichend aktuelles Android-SDK verfügbar ist.
 Bitte installieren Sie ein Android-SDK der API-Version %1 oder neuer.</translation>
@@ -28720,13 +28759,21 @@ Bitte installieren Sie ein Android-SDK der API-Version %1 oder neuer.</translati
         <source>Exit code: %1</source>
         <translation>Rückgabewert: %1</translation>
     </message>
+    <message>
+        <source>Deploy Qt libraries. This may take some time, please wait.</source>
+        <translation>Das Deployment der Qt-Bibliotheken kann einige Zeit dauern, bitte warten Sie.</translation>
+    </message>
     <message>
         <source>Qt Android smart installer installation failed</source>
         <translation>Die Installation des Qt-Android-Smart-Installers schlug fehl</translation>
     </message>
     <message>
-        <source>Package installation failed</source>
-        <translation>Die Installation des Pakets schlug fehl</translation>
+        <source>Package installation failed.</source>
+        <translation>Die Installation des Pakets schlug fehl.</translation>
+    </message>
+    <message>
+        <source>Pulling files necessary for debugging.</source>
+        <translation>Die für das Debuggen erforderlichen Dateien werden installiert.</translation>
     </message>
     <message>
         <source>Installing package onto %1.</source>
@@ -28736,19 +28783,11 @@ Bitte installieren Sie ein Android-SDK der API-Version %1 oder neuer.</translati
         <source>Clean old Qt libraries</source>
         <translation>Alte Qt-Bibliotheken bereinigen</translation>
     </message>
-    <message>
-        <source>Deploy Qt libraries ... this may take some time, please wait</source>
-        <translation>Das Deployment der Qt-Bibliotheken kann einige Zeit dauern, bitte warten Sie</translation>
-    </message>
-    <message>
-        <source>Pulling files necessary for debugging</source>
-        <translation>Die für das Debuggen erforderlichen Dateien werden installiert</translation>
-    </message>
 </context>
 <context>
     <name>Android::Internal::AndroidDeployStepFactory</name>
     <message>
-        <source>Deploy to Android device/emulator</source>
+        <source>Deploy to Android device or emulator</source>
         <translation>Deployment auf Android-Gerät oder Emulator</translation>
     </message>
 </context>
@@ -28925,8 +28964,12 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. &quot;org
         <translation>Wählen Sie ein Symbol für hohe DPI-Werte aus</translation>
     </message>
     <message>
-        <source>png images (*.png)</source>
-        <translation>png-Dateien (*.png)</translation>
+        <source>PNG images (*.png)</source>
+        <translation>PNG-Dateien (*.png)</translation>
+    </message>
+    <message>
+        <source>&lt; Type or choose a permission &gt;</source>
+        <translation>&lt; Geben Sie eine Berechtigung ein oder wählen Sie eine aus &gt;</translation>
     </message>
     <message>
         <source>Choose Medium DPI Icon</source>
@@ -28936,10 +28979,6 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. &quot;org
         <source>Choose Low DPI Icon</source>
         <translation>Wählen Sie ein Symbol für geringe DPI-Werte aus</translation>
     </message>
-    <message>
-        <source>&lt; type or choose a permission &gt;</source>
-        <translation>&lt; Geben Sie eine Berechtigung ein oder wählen Sie eine aus &gt;</translation>
-    </message>
     <message>
         <source>&lt;b&gt;Package configurations&lt;/b&gt;</source>
         <translation>&lt;b&gt;Paket-Konfigurationen&lt;/b&gt;</translation>
@@ -28970,15 +29009,15 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. &quot;org
 <context>
     <name>Android::Internal::AndroidRunControl</name>
     <message>
-        <source>Starting remote process...</source>
-        <translation>Starte entfernten Prozess...</translation>
+        <source>Starting remote process.</source>
+        <translation>Starte entfernten Prozess.</translation>
     </message>
 </context>
 <context>
     <name>Android::Internal::AndroidRunControlFactory</name>
     <message>
-        <source>Run on Android device/emulator</source>
-        <translation>Ausführung auf Android-Gerät oder Emulator</translation>
+        <source>Run on Android device or emulator.</source>
+        <translation>Ausführung auf Android-Gerät oder Emulator.</translation>
     </message>
 </context>
 <context>
@@ -28986,46 +29025,46 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. &quot;org
     <message>
         <source>
 
-&apos;%1&apos; died</source>
+&apos;%1&apos; died.</source>
         <translation>
 
-&apos;%1&apos; beendet</translation>
+&apos;%1&apos; beendet.</translation>
     </message>
     <message>
-        <source>Failed to forward C++ debugging ports. Reason: %1</source>
-        <translation>Die C++-Debuggerports konnten nicht übermittelt werden. Grund: %1</translation>
+        <source>Failed to forward C++ debugging ports. Reason: %1.</source>
+        <translation>Die C++-Debuggerports konnten nicht übermittelt werden. Grund: %1.</translation>
     </message>
     <message>
-        <source>Failed to forward C++ debugging ports</source>
-        <translation>C++-Debuggerports konnten nicht übermittelt werden</translation>
+        <source>Failed to forward C++ debugging ports.</source>
+        <translation>C++-Debuggerports konnten nicht übermittelt werden.</translation>
     </message>
     <message>
-        <source>Failed to forward QML debugging ports. Reason: %1</source>
-        <translation>Die QML-Debuggerports konnten nicht übermittelt werden. Grund: %1</translation>
+        <source>Failed to forward QML debugging ports. Reason: %1.</source>
+        <translation>Die QML-Debuggerports konnten nicht übermittelt werden. Grund: %1.</translation>
     </message>
     <message>
-        <source>Failed to forward QML debugging ports</source>
-        <translation>QML-Debuggerports konnten nicht übermittelt werden</translation>
+        <source>Failed to forward QML debugging ports.</source>
+        <translation>QML-Debuggerports konnten nicht übermittelt werden.</translation>
     </message>
     <message>
-        <source>Failed to start the activity. Reason: %1</source>
-        <translation>Die Aktivität konnte nicht gestartet werden: Grund: %1</translation>
+        <source>Failed to start the activity. Reason: %1.</source>
+        <translation>Die Aktivität konnte nicht gestartet werden: Grund: %1.</translation>
     </message>
     <message>
-        <source>Unable to start &apos;%1&apos;</source>
-        <translation>&apos;%1&apos; konnte nicht gestartet werden</translation>
+        <source>Unable to start &apos;%1&apos;.</source>
+        <translation>&apos;%1&apos; konnte nicht gestartet werden.</translation>
     </message>
     <message>
-        <source>Cannot find %1 process</source>
-        <translation>Der Prozess &apos;%1&apos; konnte nicht gefunden werden</translation>
+        <source>Cannot find %1 process.</source>
+        <translation>Der Prozess %1 konnte nicht gefunden werden.</translation>
     </message>
     <message>
         <source>
 
-&apos;%1&apos; killed</source>
+&apos;%1&apos; killed.</source>
         <translation>
 
-&apos;%1&apos; abgebrochen</translation>
+&apos;%1&apos; abgebrochen.</translation>
     </message>
 </context>
 <context>
@@ -29042,12 +29081,12 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. &quot;org
         <translation>Android-SDK-Ordner</translation>
     </message>
     <message>
-        <source>&quot;%1&quot; doesn&apos;t seem to be an Android SDK top folder</source>
-        <translation>&quot;%1&quot; ist offenbar kein Android-SDK-Ordner</translation>
+        <source>&quot;%1&quot; does not seem to be an Android SDK top folder.</source>
+        <translation>&quot;%1&quot; ist offenbar kein Android-SDK-Ordner.</translation>
     </message>
     <message>
-        <source>&quot;%1&quot; doesn&apos;t seem to be an Android NDK top folder</source>
-        <translation>&quot;%1&quot; ist offenbar kein Android-NDK-Ordner</translation>
+        <source>&quot;%1&quot; does not seem to be an Android NDK top folder.</source>
+        <translation>&quot;%1&quot; ist offenbar kein Android-NDK-Ordner.</translation>
     </message>
     <message>
         <source>Select Android SDK folder</source>
@@ -29469,40 +29508,40 @@ Einzelschritt in den Modul und das Setzen von Haltepunkten nach Datei und Zeilen
         <translation>Fehler: (%1) %2</translation>
     </message>
     <message>
-        <source>disconnected.
+        <source>Disconnected.
 
 </source>
-        <translation>getrennt.
+        <translation>Getrennt.
 
 </translation>
     </message>
     <message>
-        <source>resolving host...</source>
-        <translation>Hostname wird aufgelöst...</translation>
+        <source>Resolving host.</source>
+        <translation>Hostname wird aufgelöst.</translation>
     </message>
     <message>
-        <source>connecting to debug server...</source>
-        <translation>Verbinde zum Debug-Server...</translation>
+        <source>Connecting to debug server.</source>
+        <translation>Verbinde zum Debug-Server.</translation>
     </message>
     <message>
-        <source>connected.
+        <source>Connected.
 </source>
-        <translation>verbunden.
+        <translation>Verbunden.
 </translation>
     </message>
     <message>
-        <source>closing...</source>
-        <translation>schließe Verbindung...</translation>
+        <source>Closing.</source>
+        <translation>Schließe Verbindung.</translation>
     </message>
 </context>
 <context>
     <name>Debugger::Internal::QmlInspectorAgent</name>
     <message>
-        <source> success : </source>
-        <translation> Erfolg :  </translation>
+        <source>Success: </source>
+        <translation>Erfolg: </translation>
     </message>
     <message>
-        <source>properties</source>
+        <source>Properties</source>
         <translation>Eigenschaften</translation>
     </message>
 </context>
@@ -30063,8 +30102,8 @@ nicht konfiguriert ist.</translation>
         <translation>Gerrit...</translation>
     </message>
     <message>
-        <source>git is not available.</source>
-        <translation>git ist nicht verfügbar.</translation>
+        <source>Git is not available.</source>
+        <translation>Git ist nicht verfügbar.</translation>
     </message>
     <message>
         <source>Enter Local Repository for &apos;%1&apos; (%2)</source>
@@ -30243,7 +30282,7 @@ Möchten Sie sie zum Projekt hinzufügen?&lt;/html&gt;</translation>
         <translation>Der Typ des Geräts, auf dem die Anwendung laufen soll.</translation>
     </message>
     <message>
-        <source>Device Type:</source>
+        <source>Device type:</source>
         <translation>Gerätetyp:</translation>
     </message>
 </context>
@@ -30746,8 +30785,16 @@ Soll es noch einmal versucht werden?</translation>
 <context>
     <name>QtSupport::CustomExecutableRunConfiguration</name>
     <message>
-        <source>Could not find the executable, please specify one.</source>
-        <translation>Es konnte keine ausführbare Datei gefunden werden; bitte geben Sie eine an.</translation>
+        <source>No executable.</source>
+        <translation>Keine ausführbare Datei.</translation>
+    </message>
+    <message>
+        <source>The executable
+%1
+cannot be found in the path.</source>
+        <translation>Die ausführbare Datei
+%1
+konnte nicht im Pfad gefunden werden.</translation>
     </message>
     <message>
         <source>Clean Environment</source>
@@ -30914,8 +30961,8 @@ Soll es noch einmal versucht werden?</translation>
 <context>
     <name>Android::Internal::AndroidQtVersion</name>
     <message>
-        <source>Failed to detect the ABI(s) used by the Qt version.</source>
-        <translation>Es konnten keine ABI(s)für diese Qt-Version bestimmt werden.</translation>
+        <source>Failed to detect the ABIs used by the Qt version.</source>
+        <translation>Die von der Qt-Version verwendeten ABIs konnten nicht bestimmt werden.</translation>
     </message>
     <message>
         <source>Android</source>
@@ -31224,10 +31271,6 @@ Fehlerausgabe: %1</translation>
         <source>Check Out</source>
         <translation>Check Out</translation>
     </message>
-    <message>
-        <source>&amp;Checkout Comment:</source>
-        <translation>&amp;Checkout-Kommentar:</translation>
-    </message>
     <message>
         <source>&amp;Reserved</source>
         <translation>&amp;Reserviert</translation>
@@ -31245,6 +31288,10 @@ Fehlerausgabe: %1</translation>
         <extracomment>Hijack: Unset read-only flag without check-out. This is used for local changes which the user does not want to commit.</extracomment>
         <translation>Datei &amp;hijacked verwenden</translation>
     </message>
+    <message>
+        <source>&amp;Checkout comment:</source>
+        <translation>&amp;Checkout-Kommentar:</translation>
+    </message>
 </context>
 <context>
     <name>ClearCase::Internal::SettingsPage</name>
@@ -31351,15 +31398,6 @@ Fehlerausgabe: %1</translation>
         <source>&amp;Loaded Version</source>
         <translation>Ge&amp;ladene Version</translation>
     </message>
-    <message>
-        <source>Created By:</source>
-        <translation>Erstellt von:</translation>
-    </message>
-    <message>
-        <source>Created On:</source>
-        <extracomment>Date</extracomment>
-        <translation>Erstellt am:</translation>
-    </message>
     <message>
         <source>Version after &amp;update</source>
         <translation>Version nach &amp;Aktualisierung</translation>
@@ -31368,6 +31406,15 @@ Fehlerausgabe: %1</translation>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;b&gt;NOTE: You will not be able to check in this file without merging the changes (not supported by the plugin)&lt;/b&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;b&gt;Hinweis: Diese Datei kann nicht ohne Mergen der Änderungen eingecheckt werden (durch das Plugin nicht unterstützt)&lt;/b&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
     </message>
+    <message>
+        <source>Created by:</source>
+        <translation>Erstellt von:</translation>
+    </message>
+    <message>
+        <source>Created on:</source>
+        <extracomment>Date</extracomment>
+        <translation>Erstellt am:</translation>
+    </message>
 </context>
 <context>
     <name>Android::Internal::AvdModel</name>
@@ -31388,7 +31435,7 @@ Fehlerausgabe: %1</translation>
 <context>
     <name>ClearCase::Internal::ActivitySelector</name>
     <message>
-        <source>Select &amp;Activity:</source>
+        <source>Select &amp;activity:</source>
         <translation>Aktivität &amp;auswählen:</translation>
     </message>
     <message>
@@ -31629,10 +31676,26 @@ Fehlerausgabe: %1</translation>
         <source>File is already checked out.</source>
         <translation>Die Datei ist bereits ausgecheckt.</translation>
     </message>
+    <message>
+        <source>ClearCase Add File %1</source>
+        <translation>ClearCase Datei %1 hinzufügen</translation>
+    </message>
+    <message>
+        <source>ClearCase Remove Element %1</source>
+        <translation>ClearCase Element %1 entfernen</translation>
+    </message>
     <message>
         <source>This operation is irreversible. Are you sure?</source>
         <translation>Dieser Vorgang kann nicht rückgängig gemacht werden. Sind Sie sicher?</translation>
     </message>
+    <message>
+        <source>ClearCase Remove File %1</source>
+        <translation>ClearCase Datei %1 löschen</translation>
+    </message>
+    <message>
+        <source>ClearCase Rename File %1 -&gt; %2</source>
+        <translation>ClearCase Datei %1 -&gt; %2 umbenennen</translation>
+    </message>
     <message>
         <source>Do you want to undo hijack of &apos;%1&apos;?</source>
         <translation>Möchten Sie den Hijack von &quot;%1&quot; rückgängig machen?</translation>
@@ -31669,22 +31732,6 @@ Fehlerausgabe: %1</translation>
         <source>Enter &amp;comment:</source>
         <translation>&amp;Kommentar eingeben:</translation>
     </message>
-    <message>
-        <source>ClearCase Add File</source>
-        <translation>ClearCase Datei hinzufügen</translation>
-    </message>
-    <message>
-        <source>ClearCase Remove Element</source>
-        <translation>ClearCase Element entfernen</translation>
-    </message>
-    <message>
-        <source>ClearCase Remove File</source>
-        <translation>ClearCase Datei löschen</translation>
-    </message>
-    <message>
-        <source>ClearCase Rename File</source>
-        <translation>ClearCase Datei umbenennen</translation>
-    </message>
     <message>
         <source>Activity Headline</source>
         <translation>Titel der Aktivität</translation>
@@ -31747,7 +31794,7 @@ Fehlerausgabe: %1</translation>
     </message>
     <message>
         <source>Server port:</source>
-        <translation type="unfinished"></translation>
+        <translation>Server-Port:</translation>
     </message>
     <message>
         <source>Select Working Directory</source>
@@ -31997,25 +32044,24 @@ Fehlerausgabe: %1</translation>
 <context>
     <name>Debugger::Internal::DebuggerKitConfigWidget</name>
     <message>
-        <source>The debugger to use for this kit.</source>
-        <translation>Der für dieses Kit zu verwendende Debugger.</translation>
+        <source>Manage...</source>
+        <translation>Verwalten...</translation>
     </message>
     <message>
-        <source>&lt;html&gt;&lt;body&gt;&lt;p&gt;Specify the path to the &lt;a href=&quot;%1&quot;&gt;Windows Console Debugger executable&lt;/a&gt; (%2) here.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
-        <extracomment>Label text for path configuration. %2 is &quot;x-bit version&quot;.</extracomment>
-        <translation>&lt;html&gt;&lt;body&gt;&lt;p&gt;Geben Sie den Pfad zu der ausführbaren Datei des &lt;a href=&quot;%1&quot;&gt;Windows Console Debuggers&lt;/a&gt; (%2) an.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+        <source>The debugger to use for this kit.</source>
+        <translation>Der für dieses Kit zu verwendende Debugger.</translation>
     </message>
     <message>
-        <source>64-bit version</source>
-        <translation>64-bit-Version</translation>
+        <source>Auto-detect</source>
+        <translation>Automatisch bestimmen</translation>
     </message>
     <message>
-        <source>32-bit version</source>
-        <translation>32-bit-Version</translation>
+        <source>Edit...</source>
+        <translation>Bearbeiten...</translation>
     </message>
     <message>
-        <source>Auto detect</source>
-        <translation>Automatisch bestimmen</translation>
+        <source>Debugger for &quot;%1&quot;</source>
+        <translation>Debugger für &quot;%1&quot;</translation>
     </message>
     <message>
         <source>Debugger:</source>
@@ -32041,8 +32087,12 @@ Fehlerausgabe: %1</translation>
         <translation>Der Pfad zum Debugger muss als absoluter Pfad angegeben werden (%1).</translation>
     </message>
     <message>
-        <source>%1 using &apos;%2&apos;</source>
-        <translation>%1 unter Verwendung von &apos;%2&apos;</translation>
+        <source>%1 &lt;None&gt;</source>
+        <translation>%1 &lt;keine&gt;</translation>
+    </message>
+    <message>
+        <source>%1 using &quot;%2&quot;</source>
+        <translation>%1 unter Verwendung von &quot;%2&quot;</translation>
     </message>
     <message>
         <source>Debugger</source>
@@ -32187,8 +32237,12 @@ Fehlerausgabe: %1</translation>
 <context>
     <name>ProjectExplorer::Internal::KitManagerConfigWidget</name>
     <message>
-        <source>Kits</source>
-        <translation>Kits</translation>
+        <source>Name:</source>
+        <translation>Name:</translation>
+    </message>
+    <message>
+        <source>Kit name and icon.</source>
+        <translation>Kit-Name und Symbol.</translation>
     </message>
     <message>
         <source>Select Icon</source>
@@ -32314,4 +32368,42 @@ Fehlerausgabe: %1</translation>
         <translation>Keine</translation>
     </message>
 </context>
+<context>
+    <name>Debugger::Internal::DebuggerKitConfigDialog</name>
+    <message>
+        <source>&amp;Engine:</source>
+        <translation>&amp;Engine:</translation>
+    </message>
+    <message>
+        <source>&amp;Binary:</source>
+        <translation>&amp;Ausführbare Datei:</translation>
+    </message>
+    <message>
+        <source>64-bit version</source>
+        <translation>64-bit-Version</translation>
+    </message>
+    <message>
+        <source>32-bit version</source>
+        <translation>32-bit-Version</translation>
+    </message>
+    <message>
+        <source>&lt;html&gt;&lt;body&gt;&lt;p&gt;Specify the path to the &lt;a href=&quot;%1&quot;&gt;Windows Console Debugger executable&lt;/a&gt; (%2) here.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+        <extracomment>Label text for path configuration. %2 is &quot;x-bit version&quot;.</extracomment>
+        <translation>&lt;html&gt;&lt;body&gt;&lt;p&gt;Geben Sie den Pfad zu der ausführbaren Datei des &lt;a href=&quot;%1&quot;&gt;Windows Console Debuggers&lt;/a&gt; (%2) an.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>ProjectExplorer::RunConfiguration</name>
+    <message>
+        <source>Unknown error.</source>
+        <translation>Unbekannter Fehler.</translation>
+    </message>
+</context>
+<context>
+    <name>CustomExecutableDialog</name>
+    <message>
+        <source>Could not find the executable, please specify one.</source>
+        <translation>Es konnte keine ausführbare Datei gefunden werden; bitte geben Sie eine an.</translation>
+    </message>
+</context>
 </TS>
diff --git a/src/app/main.cpp b/src/app/main.cpp
index e96692b04fb2e57c34021512c8c24df13b1a6c7b..b3cf0c7cd248a19431dda6e00fc178e288ebf990 100644
--- a/src/app/main.cpp
+++ b/src/app/main.cpp
@@ -219,7 +219,7 @@ int main(int argc, char **argv)
     setrlimit(RLIMIT_NOFILE, &rl);
 #endif
 
-#ifdef Q_WS_X11
+#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
     // QML is unusable with the xlib backend
     QApplication::setGraphicsSystem("raster");
 #endif
diff --git a/src/libs/cplusplus/CppRewriter.cpp b/src/libs/cplusplus/CppRewriter.cpp
index 31eefe8deefe0ed3f93e5680c6da98a292f3e473..8f8da60218e6a01d823f9e6799604f37f9dffdb8 100644
--- a/src/libs/cplusplus/CppRewriter.cpp
+++ b/src/libs/cplusplus/CppRewriter.cpp
@@ -395,7 +395,8 @@ FullySpecifiedType UseMinimalNames::apply(const Name *name, Rewrite *rewrite) co
     SubstitutionEnvironment *env = rewrite->env;
     Scope *scope = env->scope();
 
-    if (name->isTemplateNameId())
+    if (name->isTemplateNameId() ||
+            (name->isQualifiedNameId() && name->asQualifiedNameId()->name()->isTemplateNameId()))
         return FullySpecifiedType();
 
     if (! scope)
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index 8edd3b30ca64855cc4ddb7cb120fc5afc617f51a..3e6756440755ddbd707122ffefb7727d5f1d82e0 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -708,11 +708,22 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
     if (!referenceClass)
         return reference;
 
+    const TemplateNameId *templId = name->asTemplateNameId();
+    if (_alreadyConsideredClasses.contains(referenceClass) ||
+            (templId &&
+            _alreadyConsideredTemplates.contains(templId))) {
+            return reference;
+    }
+
+    if (!name->isTemplateNameId())
+        _alreadyConsideredClasses.insert(referenceClass);
+
     QSet<ClassOrNamespace *> knownUsings = reference->usings().toSet();
 
     // If we are dealling with a template type, more work is required, since we need to
     // construct all instantiation data.
-    if (const TemplateNameId *templId = name->asTemplateNameId()) {
+    if (templId) {
+        _alreadyConsideredTemplates.insert(templId);
         ClassOrNamespace *instantiation = _factory->allocClassOrNamespace(reference);
         instantiation->_templateId = templId;
         instantiation->_instantiationOrigin = origin;
@@ -786,18 +797,41 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
             }
         }
 
+        _alreadyConsideredTemplates.clear(templId);
         return instantiation;
     }
 
+    if (allBases.isEmpty() || allBases.size() == knownUsings.size())
+        return reference;
+
+    QList<const Name *> fullyQualifiedNameForReferenceClass =
+            LookupContext::fullyQualifiedName(referenceClass);
     // Find the missing bases for regular (non-template) types.
     // Ex.: class A : public B<Some>::Type {};
     foreach (const Name *baseName, allBases) {
         ClassOrNamespace *binding = this;
         if (const QualifiedNameId *qBaseName = baseName->asQualifiedNameId()) {
+            QList<const Name *> fullyQualifiedNameForBaseClass;
+            addNames(baseName, &fullyQualifiedNameForBaseClass);
+            if (compareFullyQualifiedName(fullyQualifiedNameForReferenceClass,
+                                          fullyQualifiedNameForBaseClass)) {
+                continue;
+            }
+
             if (const Name *qualification = qBaseName->base())
                 binding = lookupType(qualification);
+            else if (binding->parent() != 0)
+                //if this is global identifier we take global namespace
+                //Ex: class A{}; namespace NS { class A: public ::A{}; }
+                binding = binding->globalNamespace();
+            else
+                //if we are in the global scope
+                continue;
             baseName = qBaseName->name();
         }
+        else if (compareName(name, baseName)) {
+            continue;
+        }
 
         if (binding) {
             ClassOrNamespace * baseBinding = binding->lookupType(baseName);
@@ -806,7 +840,7 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
         }
     }
 
-
+    _alreadyConsideredClasses.clear(referenceClass);
     return reference;
 }
 
diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h
index fef317fd6146ccadc27ead391cced84c659ab489..6db8b1187deb42c457aeb1f63bac2b504cf1bc81 100644
--- a/src/libs/cplusplus/LookupContext.h
+++ b/src/libs/cplusplus/LookupContext.h
@@ -45,6 +45,33 @@
 namespace CPlusPlus {
 
 class CreateBindings;
+class Class;
+template<typename T>
+class AlreadyConsideredClassContainer
+{
+public:
+    AlreadyConsideredClassContainer() : _class(0) {}
+    void insert(const T *item)
+    {
+        if (_container.isEmpty())
+            _class = item;
+        _container.insert(item);
+    }
+    bool contains(const T *item)
+    {
+        return _container.contains(item);
+    }
+
+    void clear(const T *item)
+    {
+        if (_class != item)
+            _container.clear();
+    }
+
+private:
+    QSet<const T *> _container;
+    const T * _class;
+};
 
 class CPLUSPLUS_EXPORT ClassOrNamespace
 {
@@ -112,6 +139,9 @@ private:
     const TemplateNameId *_templateId;
     ClassOrNamespace *_instantiationOrigin;
 
+    AlreadyConsideredClassContainer<Class> _alreadyConsideredClasses;
+    AlreadyConsideredClassContainer<TemplateNameId> _alreadyConsideredTemplates;
+
     friend class CreateBindings;
 };
 
diff --git a/src/libs/qmldebug/baseenginedebugclient.cpp b/src/libs/qmldebug/baseenginedebugclient.cpp
index a669d59f6b224c2c7abf88f2bf19cfb28164929e..15acd7a6c1a81ba2262bfa2db01f928c244af22b 100644
--- a/src/libs/qmldebug/baseenginedebugclient.cpp
+++ b/src/libs/qmldebug/baseenginedebugclient.cpp
@@ -76,8 +76,8 @@ void BaseEngineDebugClient::decode(QDataStream &ds,
     QmlObjectData data;
     ds >> data;
     int parentId = -1;
-    if (objectName() == QLatin1String("QmlDebugger") &&
-            serviceVersion() >= Constants::CURRENT_SUPPORTED_VERSION )
+    // qt > 4.8.3
+    if (objectName() != QLatin1String(Constants::QDECLARATIVE_ENGINE))
         ds >> parentId;
     o.m_debugId = data.objectId;
     o.m_className = data.objectType;
@@ -184,19 +184,15 @@ void BaseEngineDebugClient::messageReceived(const QByteArray &data)
     QDataStream ds(data);
     int queryId;
     QByteArray type;
-    ds >> type;
+    ds >> type >> queryId;
 
     if (type == "OBJECT_CREATED") {
         int engineId;
         int objectId;
-        ds >> engineId >> objectId;
-        emit newObject(engineId, objectId, -1);
-        return;
-    }
-
-    ds >> queryId;
-
-    if (type == "LIST_ENGINES_R") {
+        int parentId;
+        ds >> engineId >> objectId >> parentId;
+        emit newObject(engineId, objectId, parentId);
+    } else if (type == "LIST_ENGINES_R") {
         int count;
         ds >> count;
         QList<EngineReference> engines;
@@ -398,7 +394,7 @@ quint32 BaseEngineDebugClient::setBindingForObject(
         id = getId();
         QByteArray message;
         QDataStream ds(&message, QIODevice::WriteOnly);
-        ds << QByteArray("SET_BINDING") << objectDebugId << propertyName
+        ds << QByteArray("SET_BINDING") << id << objectDebugId << propertyName
            << bindingExpression << isLiteralValue << source << line;
         sendMessage(message);
     }
@@ -414,7 +410,7 @@ quint32 BaseEngineDebugClient::resetBindingForObject(
         id = getId();
         QByteArray message;
         QDataStream ds(&message, QIODevice::WriteOnly);
-        ds << QByteArray("RESET_BINDING") << objectDebugId << propertyName;
+        ds << QByteArray("RESET_BINDING") << id << objectDebugId << propertyName;
         sendMessage(message);
     }
     return id;
@@ -429,7 +425,7 @@ quint32 BaseEngineDebugClient::setMethodBody(
         id = getId();
         QByteArray message;
         QDataStream ds(&message, QIODevice::WriteOnly);
-        ds << QByteArray("SET_METHOD_BODY") << objectDebugId
+        ds << QByteArray("SET_METHOD_BODY") << id << objectDebugId
            << methodName << methodBody;
         sendMessage(message);
     }
diff --git a/src/libs/qmldebug/qmlenginedebugclient.cpp b/src/libs/qmldebug/declarativeenginedebugclient.cpp
similarity index 77%
rename from src/libs/qmldebug/qmlenginedebugclient.cpp
rename to src/libs/qmldebug/declarativeenginedebugclient.cpp
index 07c69a497cc8e2181b936644f739dea5f787fb7d..2a5191e2a187c95ed8579861e391be1fff8f078c 100644
--- a/src/libs/qmldebug/qmlenginedebugclient.cpp
+++ b/src/libs/qmldebug/declarativeenginedebugclient.cpp
@@ -27,18 +27,18 @@
 **
 **************************************************************************/
 
-#include "qmlenginedebugclient.h"
+#include "declarativeenginedebugclient.h"
 #include "qmldebugconstants.h"
 
 namespace QmlDebug {
 
-QmlEngineDebugClient::QmlEngineDebugClient(
+DeclarativeEngineDebugClient::DeclarativeEngineDebugClient(
         QmlDebugConnection *connection)
-    : BaseEngineDebugClient(QLatin1String(Constants::QML_DEBUGGER), connection)
+    : BaseEngineDebugClient(QLatin1String(Constants::QDECLARATIVE_ENGINE), connection)
 {
 }
 
-quint32 QmlEngineDebugClient::setBindingForObject(
+quint32 DeclarativeEngineDebugClient::setBindingForObject(
         int objectDebugId,
         const QString &propertyName,
         const QVariant &bindingExpression,
@@ -50,14 +50,14 @@ quint32 QmlEngineDebugClient::setBindingForObject(
         id = getId();
         QByteArray message;
         QDataStream ds(&message, QIODevice::WriteOnly);
-        ds << QByteArray("SET_BINDING") << id << objectDebugId << propertyName
+        ds << QByteArray("SET_BINDING") << objectDebugId << propertyName
            << bindingExpression << isLiteralValue << source << line;
         sendMessage(message);
     }
     return id;
 }
 
-quint32 QmlEngineDebugClient::resetBindingForObject(
+quint32 DeclarativeEngineDebugClient::resetBindingForObject(
         int objectDebugId,
         const QString &propertyName)
 {
@@ -66,13 +66,13 @@ quint32 QmlEngineDebugClient::resetBindingForObject(
         id = getId();
         QByteArray message;
         QDataStream ds(&message, QIODevice::WriteOnly);
-        ds << QByteArray("RESET_BINDING") << id << objectDebugId << propertyName;
+        ds << QByteArray("RESET_BINDING") << objectDebugId << propertyName;
         sendMessage(message);
     }
     return id;
 }
 
-quint32 QmlEngineDebugClient::setMethodBody(
+quint32 DeclarativeEngineDebugClient::setMethodBody(
         int objectDebugId, const QString &methodName,
         const QString &methodBody)
 {
@@ -81,26 +81,24 @@ quint32 QmlEngineDebugClient::setMethodBody(
         id = getId();
         QByteArray message;
         QDataStream ds(&message, QIODevice::WriteOnly);
-        ds << QByteArray("SET_METHOD_BODY") << id << objectDebugId
+        ds << QByteArray("SET_METHOD_BODY") << objectDebugId
            << methodName << methodBody;
         sendMessage(message);
     }
     return id;
 }
 
-void QmlEngineDebugClient::messageReceived(const QByteArray &data)
+void DeclarativeEngineDebugClient::messageReceived(const QByteArray &data)
 {
     QDataStream ds(data);
-    int queryId;
     QByteArray type;
-    ds >> type >> queryId;
+    ds >> type;
 
     if (type == "OBJECT_CREATED") {
         int engineId;
         int objectId;
-        int parentId;
-        ds >> engineId >> objectId >> parentId;
-        emit newObject(engineId, objectId, parentId);
+        ds >> engineId >> objectId;
+        emit newObject(engineId, objectId, -1);
         return;
     } else {
         BaseEngineDebugClient::messageReceived(data);
diff --git a/src/libs/qmldebug/declarativeenginedebugclient.h b/src/libs/qmldebug/declarativeenginedebugclient.h
index 5cfe28279ff42b8fdc52fc72dfc23c96b58a3829..2807163ff0e3dfd3589f52fa089846720a090d5e 100644
--- a/src/libs/qmldebug/declarativeenginedebugclient.h
+++ b/src/libs/qmldebug/declarativeenginedebugclient.h
@@ -40,10 +40,18 @@ class QMLDEBUG_EXPORT DeclarativeEngineDebugClient : public BaseEngineDebugClien
 {
     Q_OBJECT
 public:
-    DeclarativeEngineDebugClient(QmlDebugConnection *conn)
-        : BaseEngineDebugClient(QLatin1String("QDeclarativeEngine"), conn)
-    {
-    }
+    explicit DeclarativeEngineDebugClient(QmlDebugConnection *conn);
+
+    quint32 setBindingForObject(int objectDebugId, const QString &propertyName,
+                                const QVariant &bindingExpression,
+                                bool isLiteralValue,
+                                QString source, int line);
+    quint32 resetBindingForObject(int objectDebugId, const QString &propertyName);
+    quint32 setMethodBody(int objectDebugId, const QString &methodName,
+                          const QString &methodBody);
+
+protected:
+    void messageReceived(const QByteArray &data);
 };
 
 } // namespace QmlDebug
diff --git a/src/libs/qmldebug/declarativeenginedebugclientv2.h b/src/libs/qmldebug/declarativeenginedebugclientv2.h
new file mode 100644
index 0000000000000000000000000000000000000000..6db574393504dad18705746859394066e517afe7
--- /dev/null
+++ b/src/libs/qmldebug/declarativeenginedebugclientv2.h
@@ -0,0 +1,51 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: http://www.qt-project.org/
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**************************************************************************/
+
+#ifndef DECLARATIVEENGINEDEBUGCLIENTV2_H
+#define DECLARATIVEENGINEDEBUGCLIENTV2_H
+
+#include "baseenginedebugclient.h"
+
+namespace QmlDebug {
+
+class QmlDebugConnection;
+
+class QMLDEBUG_EXPORT DeclarativeEngineDebugClientV2 : public BaseEngineDebugClient
+{
+    Q_OBJECT
+public:
+    explicit DeclarativeEngineDebugClientV2(QmlDebugConnection *conn)
+        : BaseEngineDebugClient(QLatin1String("DeclarativeDebugger"), conn)
+    {
+    }
+};
+
+} // namespace QmlDebug
+
+#endif // DECLARATIVEENGINEDEBUGCLIENTV2_H
diff --git a/src/libs/qmldebug/qdebugmessageclient.cpp b/src/libs/qmldebug/qdebugmessageclient.cpp
index c6c6433e67679c80a7a3bca52a1b6b411aa02ac8..48ffa89b5b3f087fba3b26548fb9db6b82b1e0d0 100644
--- a/src/libs/qmldebug/qdebugmessageclient.cpp
+++ b/src/libs/qmldebug/qdebugmessageclient.cpp
@@ -55,30 +55,17 @@ void QDebugMessageClient::messageReceived(const QByteArray &data)
     ds >> command;
 
     if (command == "MESSAGE") {
-        if (serviceVersion() == 1.0) {
-            QByteArray messagePacket;
-            ds >> messagePacket;
-
-            QByteArray debugMessage;
-            int type;
-            QDataStream ms(messagePacket);
-            ms >> type >> debugMessage;
-            QDebugContextInfo info;
-            emit message(QtMsgType(type), QString::fromUtf8(debugMessage.data()),
-                         info);
-        } else {
-            int type;
-            int line;
-            QByteArray debugMessage;
-            QByteArray file;
-            QByteArray function;
-            ds >> type >> debugMessage >> file >> line >> function;
-            QDebugContextInfo info;
-            info.line = line;
-            info.file = QString::fromUtf8(file);
-            info.function = QString::fromUtf8(function);
-            emit message(QtMsgType(type), QString::fromUtf8(debugMessage), info);
-        }
+        int type;
+        int line;
+        QByteArray debugMessage;
+        QByteArray file;
+        QByteArray function;
+        ds >> type >> debugMessage >> file >> line >> function;
+        QDebugContextInfo info;
+        info.line = line;
+        info.file = QString::fromUtf8(file);
+        info.function = QString::fromUtf8(function);
+        emit message(QtMsgType(type), QString::fromUtf8(debugMessage), info);
     }
 }
 
diff --git a/src/libs/qmldebug/qmldebug-lib.pri b/src/libs/qmldebug/qmldebug-lib.pri
index a1406ee580e984e27e994b0c1c6490df1adb99ba..54f09258b07acf72607be80c496d0901d3778682 100644
--- a/src/libs/qmldebug/qmldebug-lib.pri
+++ b/src/libs/qmldebug/qmldebug-lib.pri
@@ -11,6 +11,7 @@ HEADERS += \
     $$PWD/qmldebugclient.h \
     $$PWD/baseenginedebugclient.h \
     $$PWD/declarativeenginedebugclient.h \
+    $$PWD/declarativeenginedebugclientv2.h \
     $$PWD/qmloutputparser.h \
     $$PWD/qmldebug_global.h \
     $$PWD/qmlprofilereventtypes.h \
@@ -32,8 +33,8 @@ SOURCES += \
     $$PWD/qpacketprotocol.cpp \
     $$PWD/qv8profilerclient.cpp \
     $$PWD/qdebugmessageclient.cpp \
-    $$PWD/qmlenginedebugclient.cpp \
     $$PWD/basetoolsclient.cpp \
     $$PWD/declarativetoolsclient.cpp \
-    $$PWD/qmltoolsclient.cpp
+    $$PWD/qmltoolsclient.cpp \
+    $$PWD/declarativeenginedebugclient.cpp
 
diff --git a/src/libs/qmldebug/qmldebug.qbs b/src/libs/qmldebug/qmldebug.qbs
index f3269e3ec2e18d4bf701d35d81b5b342b971d2aa..5b6d5d21cffb404f9ec9f913b7bda757dd00c528 100644
--- a/src/libs/qmldebug/qmldebug.qbs
+++ b/src/libs/qmldebug/qmldebug.qbs
@@ -20,7 +20,9 @@ QtcLibrary {
         "baseenginedebugclient.h",
         "basetoolsclient.cpp",
         "basetoolsclient.h",
+        "declarativeenginedebugclient.cpp",
         "declarativeenginedebugclient.h",
+        "declarativeenginedebugclientv2.h",
         "declarativetoolsclient.cpp",
         "declarativetoolsclient.h",
         "qdebugmessageclient.cpp",
diff --git a/src/libs/qmldebug/qmldebugconstants.h b/src/libs/qmldebug/qmldebugconstants.h
index 36ccf4fb9e46a68edeffe784f58786f8411a79a4..147d4f62ec9ed4d38e5d8aa5e477e100000372df 100644
--- a/src/libs/qmldebug/qmldebugconstants.h
+++ b/src/libs/qmldebug/qmldebugconstants.h
@@ -42,8 +42,7 @@ const char STR_IGNORING_DEBUGGER[] = "Ignoring \"-qmljsdebugger=";
 const char STR_IGNORING_DEBUGGER2[] = "Ignoring\"-qmljsdebugger="; // There is (was?) a bug in one of the error strings - safest to handle both
 const char STR_CONNECTION_ESTABLISHED[] = "Connection established";
 
-const char QML_DEBUGGER[] = "QmlDebugger";
-const float CURRENT_SUPPORTED_VERSION = 2.0;
+const char QDECLARATIVE_ENGINE[] = "QDeclarativeEngine";
 
 } // namespace Constants
 } // namespace QmlDebug
diff --git a/src/libs/qmldebug/qmlenginedebugclient.h b/src/libs/qmldebug/qmlenginedebugclient.h
index eea286b810ca2b8c84fdb115739d6a2be61afce7..7231d65d7d3799c2d541d60cbb2c6d482ab76650 100644
--- a/src/libs/qmldebug/qmlenginedebugclient.h
+++ b/src/libs/qmldebug/qmlenginedebugclient.h
@@ -40,18 +40,10 @@ class QMLDEBUG_EXPORT QmlEngineDebugClient : public BaseEngineDebugClient
 {
     Q_OBJECT
 public:
-    explicit QmlEngineDebugClient(QmlDebugConnection *conn);
-
-    quint32 setBindingForObject(int objectDebugId, const QString &propertyName,
-                                const QVariant &bindingExpression,
-                                bool isLiteralValue,
-                                QString source, int line);
-    quint32 resetBindingForObject(int objectDebugId, const QString &propertyName);
-    quint32 setMethodBody(int objectDebugId, const QString &methodName,
-                          const QString &methodBody);
-
-protected:
-    void messageReceived(const QByteArray &data);
+    explicit QmlEngineDebugClient(QmlDebugConnection *conn)
+        : BaseEngineDebugClient(QLatin1String("QmlDebugger"), conn)
+    {
+    }
 };
 
 } // namespace QmlDebug
diff --git a/src/libs/ssh/sftpchannel.cpp b/src/libs/ssh/sftpchannel.cpp
index 152afaa4535ca58b6902b948107c5e9133e2a934..bba482ae9d1cfe0cda2216ce05a2b1ecf5f44327 100644
--- a/src/libs/ssh/sftpchannel.cpp
+++ b/src/libs/ssh/sftpchannel.cpp
@@ -272,7 +272,7 @@ void SftpChannelPrivate::handleChannelFailure()
         throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR,
             "Unexpected SSH_MSG_CHANNEL_FAILURE packet.");
     }
-    emit initializationFailed(tr("Server could not start sftp subsystem."));
+    emit initializationFailed(tr("Server could not start SFTP subsystem."));
     closeChannel();
 }
 
diff --git a/src/libs/ssh/sshconnection.cpp b/src/libs/ssh/sshconnection.cpp
index e03304ca2eedcd59c7d8c1c81921906d4bd733c3..0498b4f2856d0ba072d92700992be785c990ad1c 100644
--- a/src/libs/ssh/sshconnection.cpp
+++ b/src/libs/ssh/sshconnection.cpp
@@ -365,8 +365,8 @@ void SshConnectionPrivate::handleServerId()
     if (newLinePos > 255 - 1) {
         throw SshServerException(SSH_DISCONNECT_PROTOCOL_ERROR,
             "Identification string too long.",
-            tr("Server identification string is %1 characters long, but the maximum "
-               "allowed length is 255.").arg(newLinePos + 1));
+            tr("Server identification string is %n characters long, but the maximum "
+               "allowed length is 255.", 0, newLinePos + 1));
     }
 
     const bool hasCarriageReturn = m_incomingData.at(newLinePos - 1) == '\r';
diff --git a/src/libs/ssh/sshkeycreationdialog.cpp b/src/libs/ssh/sshkeycreationdialog.cpp
index 287ea8e21ac8540dad383ef19aa64d231bca91c5..d3d59a88f0c1798cb31f0d79e30a6002d1403486 100644
--- a/src/libs/ssh/sshkeycreationdialog.cpp
+++ b/src/libs/ssh/sshkeycreationdialog.cpp
@@ -106,7 +106,7 @@ void SshKeyCreationDialog::saveKeys()
 {
     const QString parentDir = QFileInfo(privateKeyFilePath()).dir().path();
     if (!QDir::root().mkpath(parentDir)) {
-        QMessageBox::critical(this, tr("Failure To Save Key File"),
+        QMessageBox::critical(this, tr("Cannot Save Key File"),
             tr("Failed to create directory: '%1'.").arg(parentDir));
         return;
     }
@@ -114,7 +114,7 @@ void SshKeyCreationDialog::saveKeys()
     QFile privateKeyFile(privateKeyFilePath());
     if (!privateKeyFile.open(QIODevice::WriteOnly)
             || !privateKeyFile.write(m_keyGenerator->privateKey())) {
-        QMessageBox::critical(this, tr("Saving Private Key File failed"),
+        QMessageBox::critical(this, tr("Cannot Save Private Key File"),
             tr("The private key file could not be saved: %1").arg(privateKeyFile.errorString()));
         return;
     }
@@ -123,7 +123,7 @@ void SshKeyCreationDialog::saveKeys()
     QFile publicKeyFile(publicKeyFilePath());
     if (!publicKeyFile.open(QIODevice::WriteOnly)
             || !publicKeyFile.write(m_keyGenerator->publicKey())) {
-        QMessageBox::critical(this, tr("Saving Public Key File failed"),
+        QMessageBox::critical(this, tr("Cannot Save Public Key File"),
             tr("The public key file could not be saved: %1").arg(publicKeyFile.errorString()));
         return;
     }
diff --git a/src/libs/zeroconf/avahiLib.cpp b/src/libs/zeroconf/avahiLib.cpp
index 69b9993781b00d6532053f2f2bb7868a21f4792b..d23eccc4c4d7ec98ed475f886bf44cb5b021b695 100644
--- a/src/libs/zeroconf/avahiLib.cpp
+++ b/src/libs/zeroconf/avahiLib.cpp
@@ -346,7 +346,7 @@ public:
             if (m_simplePollFree)
                 m_simplePollFree(connection->simple_poll);
             delete connection;
-            setError(true, ZConfLib::tr("%1 could not create a client (probably the daemon is not running)").arg(name()));
+            setError(true, ZConfLib::tr("%1 cannot create a client. The daemon is probably not running.").arg(name()));
             return kDNSServiceErr_Unknown;
         }
         *sdRef = reinterpret_cast<ConnectionRef>(connection);
@@ -472,16 +472,16 @@ extern "C" void cAvahiClientReply (AvahiClient * /*s*/, AvahiClientState state,
         break;
     case (AVAHI_CLIENT_S_COLLISION):
         /* Server state: COLLISION */
-        lib->setError(true, ZConfLib::tr("cAvahiClient, server collision"));
+        lib->setError(true, ZConfLib::tr("cAvahiClient, server collision."));
         break;
     case (AVAHI_CLIENT_FAILURE):
-        lib->setError(true, ZConfLib::tr("cAvahiClient, some kind of error happened on the client side"));
+        lib->setError(true, ZConfLib::tr("cAvahiClient, an error occurred on the client side."));
         break;
     case (AVAHI_CLIENT_CONNECTING):
-        lib->setError(false, ZConfLib::tr("cAvahiClient, still connecting, no server available"));
+        lib->setError(false, ZConfLib::tr("cAvahiClient, still connecting, no server available."));
         break;
     default:
-        lib->setError(true, ZConfLib::tr("unexpected state %1 in cAvahiClientReply")
+        lib->setError(true, ZConfLib::tr("Unexpected state %1 in cAvahiClientReply.")
                       .arg(state));
     }
 }
@@ -532,7 +532,7 @@ extern "C" void cAvahiBrowseReply(
             break;
         default:
             browser->mainConnection->lib->setError(true, ZConfLib::tr(
-                                                       "unexpected state %1 in cAvahiBrowseReply")
+                                                       "Unexpected state %1 in cAvahiBrowseReply.")
                                                    .arg(event));
     }
 }
diff --git a/src/libs/zeroconf/servicebrowser.cpp b/src/libs/zeroconf/servicebrowser.cpp
index fff6069df32aec99d672aae376ab93b08cc7f4f7..9a31075255d451f2019ec6747a63780582552de2 100644
--- a/src/libs/zeroconf/servicebrowser.cpp
+++ b/src/libs/zeroconf/servicebrowser.cpp
@@ -1849,7 +1849,7 @@ void MainConnection::createConnection()
             if (m_nErrs > lib->maxErrors() || !lib->isOk()) {
                 abortLib();
             } else if (lib->tryStartDaemon(this)) {
-                appendError(ErrorMessage::WarningLevel, tr("Zeroconf using %1 daemon starting seem successful, continuing.")
+                appendError(ErrorMessage::WarningLevel, tr("Starting the Zeroconf daemon using %1 seems successful, continuing.")
                                         .arg(lib->name()));
             } else {
                 appendError(ErrorMessage::WarningLevel, tr("Zeroconf using %1 failed because no daemon is running.")
@@ -1863,7 +1863,7 @@ void MainConnection::createConnection()
         }
     }
     if (status() < Stopping) {
-        startupPhase(zeroConfLibInstance()->nFallbacksTot() + 3, tr("Succeded using %1.").arg(lib->name()));
+        startupPhase(zeroConfLibInstance()->nFallbacksTot() + 3, tr("Succeeded using %1.").arg(lib->name()));
         appendError(ErrorMessage::NoteLevel,
                     tr("MainConnection could successfully create a connection using %1.")
                     .arg(lib->name()));
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index 17e28257a72ccfbc3ce8b6b5c4357731091baa61..c6b9d9dbe4c59d4fcb8bfefac16a002ede2ebc82 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -439,7 +439,7 @@ bool AndroidConfigurations::createAVD(int minApiLevel) const
     avdDialog.targetComboBox->setModel(&model);
     if (!model.rowCount()) {
         QMessageBox::critical(0, tr("Error Creating AVD"),
-                              tr("Cannot create a new AVD, no sufficiently recent Android SDK available.\n"
+                              tr("Cannot create a new AVD. No sufficiently recent Android SDK available.\n"
                                  "Please install an SDK of at least API version %1.").
                               arg(minApiLevel));
         return false;
diff --git a/src/plugins/android/androidcreatekeystorecertificate.ui b/src/plugins/android/androidcreatekeystorecertificate.ui
index 553cdba0f660da26cff3e642cc48237b53996df6..ed0d4ecf8b70e59e37a578c1b5d78b853946ca32 100644
--- a/src/plugins/android/androidcreatekeystorecertificate.ui
+++ b/src/plugins/android/androidcreatekeystorecertificate.ui
@@ -248,7 +248,7 @@
       <item row="3" column="0">
        <widget class="QLabel" name="label_8">
         <property name="text">
-         <string>City or Locality:</string>
+         <string>City or locality:</string>
         </property>
         <property name="alignment">
          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -261,7 +261,7 @@
       <item row="4" column="0">
        <widget class="QLabel" name="label_9">
         <property name="text">
-         <string>State or Province:</string>
+         <string>State or province:</string>
         </property>
         <property name="alignment">
          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
diff --git a/src/plugins/android/androiddeploystep.cpp b/src/plugins/android/androiddeploystep.cpp
index df8fc9867b1deedce7f8570f62226688e078974f..a233c625b0daf936cd21c76b0832ed37c33c2774 100644
--- a/src/plugins/android/androiddeploystep.cpp
+++ b/src/plugins/android/androiddeploystep.cpp
@@ -255,7 +255,7 @@ bool AndroidDeployStep::deployPackage()
                    QStringList() << QLatin1String("-s") << m_deviceSerialNumber
                    << QLatin1String("shell") << QLatin1String("rm") << QLatin1String("-r") << QLatin1String("/data/local/qt"));
 
-        writeOutput(tr("Deploy Qt libraries ... this may take some time, please wait"));
+        writeOutput(tr("Deploy Qt libraries. This may take some time, please wait."));
         const QString tempPath = QDir::tempPath() + QLatin1String("/android_qt_libs_") + m_packageName;
         AndroidPackageCreationStep::removeDirectory(tempPath);
         QStringList stripFiles;
@@ -299,13 +299,13 @@ bool AndroidDeployStep::deployPackage()
 
     if (!runCommand(deployProc, AndroidConfigurations::instance().adbToolPath().toString(),
                     QStringList() << QLatin1String("-s") << m_deviceSerialNumber << QLatin1String("install") << package)) {
-        raiseError(tr("Package installation failed"));
+        raiseError(tr("Package installation failed."));
         disconnect(deployProc, 0, this, 0);
         deployProc->deleteLater();
         return false;
     }
 
-    writeOutput(tr("Pulling files necessary for debugging"));
+    writeOutput(tr("Pulling files necessary for debugging."));
     runCommand(deployProc, AndroidConfigurations::instance().adbToolPath().toString(),
                QStringList() << QLatin1String("-s") << m_deviceSerialNumber
                << QLatin1String("pull") << QLatin1String("/system/bin/app_process")
diff --git a/src/plugins/android/androiddeploystepfactory.cpp b/src/plugins/android/androiddeploystepfactory.cpp
index e7a6a6e9cdfd1537916108ac589d7ea088b2eec5..0ac3502b9ba68415e600c1e31b6ca714bb944316 100644
--- a/src/plugins/android/androiddeploystepfactory.cpp
+++ b/src/plugins/android/androiddeploystepfactory.cpp
@@ -65,7 +65,7 @@ QList<Core::Id> AndroidDeployStepFactory::availableCreationIds(BuildStepList *pa
 QString AndroidDeployStepFactory::displayNameForId(const Core::Id id) const
 {
     if (id == AndroidDeployStep::Id)
-        return tr("Deploy to Android device/emulator");
+        return tr("Deploy to Android device or emulator");
     return QString();
 }
 
diff --git a/src/plugins/android/androiddeploystepwidget.ui b/src/plugins/android/androiddeploystepwidget.ui
index 50e1eb620db2c4cbd45385cbd9a83bf12c931f05..dd7c51e78420e04a0d8c5a4863d6b948401cb1d8 100644
--- a/src/plugins/android/androiddeploystepwidget.ui
+++ b/src/plugins/android/androiddeploystepwidget.ui
@@ -59,7 +59,7 @@ You must have Qt libraries compiled for that platform</string>
      <item>
       <widget class="QPushButton" name="editRulesFilePushButton">
        <property name="text">
-        <string>Edit rules file</string>
+        <string>Edit Rules File</string>
        </property>
       </widget>
      </item>
@@ -74,7 +74,7 @@ You must have Qt libraries compiled for that platform</string>
 This option is useful when you want to try your application on devices which don't have Android Market (e.g. Android Emulator).</string>
        </property>
        <property name="text">
-        <string>Install Ministro system wide Qt shared libraries installer</string>
+        <string>Install Ministro, system-wide Qt shared libraries installer</string>
        </property>
       </widget>
      </item>
@@ -84,7 +84,7 @@ This option is useful when you want to try your application on devices which don
         <bool>false</bool>
        </property>
        <property name="text">
-        <string>Choose apk</string>
+        <string>Choose APK</string>
        </property>
       </widget>
      </item>
diff --git a/src/plugins/android/androidpackagecreationwidget.cpp b/src/plugins/android/androidpackagecreationwidget.cpp
index 61757995fa6514913350c4256a32ac1d7c82db88..8ea43ab17c6fa7438aa60c9cdbb95c2311e3b0d2 100644
--- a/src/plugins/android/androidpackagecreationwidget.cpp
+++ b/src/plugins/android/androidpackagecreationwidget.cpp
@@ -403,7 +403,7 @@ void AndroidPackageCreationWidget::prebundledLibMoveDown()
 
 void AndroidPackageCreationWidget::setHDPIIcon()
 {
-    QString file = QFileDialog::getOpenFileName(this, tr("Choose High DPI Icon"), QDir::homePath(), tr("png images (*.png)"));
+    QString file = QFileDialog::getOpenFileName(this, tr("Choose High DPI Icon"), QDir::homePath(), tr("PNG images (*.png)"));
     if (!file.length())
         return;
     AndroidManager::setHighDpiIcon(m_step->target(), file);
@@ -412,7 +412,7 @@ void AndroidPackageCreationWidget::setHDPIIcon()
 
 void AndroidPackageCreationWidget::setMDPIIcon()
 {
-    QString file = QFileDialog::getOpenFileName(this, tr("Choose Medium DPI Icon"), QDir::homePath(), tr("png images (*.png)"));
+    QString file = QFileDialog::getOpenFileName(this, tr("Choose Medium DPI Icon"), QDir::homePath(), tr("PNG images (*.png)"));
     if (!file.length())
         return;
     AndroidManager::setMediumDpiIcon(m_step->target(), file);
@@ -421,7 +421,7 @@ void AndroidPackageCreationWidget::setMDPIIcon()
 
 void AndroidPackageCreationWidget::setLDPIIcon()
 {
-    QString file = QFileDialog::getOpenFileName(this, tr("Choose Low DPI Icon"), QDir::homePath(), tr("png images (*.png)"));
+    QString file = QFileDialog::getOpenFileName(this, tr("Choose Low DPI Icon"), QDir::homePath(), tr("PNG images (*.png)"));
     if (!file.length())
         return;
     AndroidManager::setLowDpiIcon(m_step->target(), file);
@@ -438,8 +438,8 @@ void AndroidPackageCreationWidget::permissionActivated(QModelIndex index)
 void AndroidPackageCreationWidget::addPermission()
 {
     setEnabledSaveDiscardButtons(true);
-    m_ui->permissionsListView->setCurrentIndex(m_permissionsModel->addPermission(tr("< type or choose a permission >")));
-    m_ui->permissionsComboBox->lineEdit()->setText(tr("< type or choose a permission >"));
+    m_ui->permissionsListView->setCurrentIndex(m_permissionsModel->addPermission(tr("< Type or choose a permission >")));
+    m_ui->permissionsComboBox->lineEdit()->setText(tr("< Type or choose a permission >"));
     m_ui->permissionsComboBox->setFocus();
     m_ui->removePermissionButton->setEnabled(m_permissionsModel->permissions().size());
 }
diff --git a/src/plugins/android/androidqtversion.cpp b/src/plugins/android/androidqtversion.cpp
index 026c82acea09c5464749cab9bfcf968609a06349..38a4d25759b9f529698dce24ff0dd55df1492fef 100644
--- a/src/plugins/android/androidqtversion.cpp
+++ b/src/plugins/android/androidqtversion.cpp
@@ -69,7 +69,7 @@ QString AndroidQtVersion::invalidReason() const
 {
     QString tmp = BaseQtVersion::invalidReason();
     if (tmp.isEmpty() && qtAbis().isEmpty())
-        return tr("Failed to detect the ABI(s) used by the Qt version.");
+        return tr("Failed to detect the ABIs used by the Qt version.");
     return tmp;
 }
 
diff --git a/src/plugins/android/androidruncontrol.cpp b/src/plugins/android/androidruncontrol.cpp
index 0597668ebede59a9c28523224867786daa8ba6c5..a03872fe593053a2e8a74dfa91b784c113fd079d 100644
--- a/src/plugins/android/androidruncontrol.cpp
+++ b/src/plugins/android/androidruncontrol.cpp
@@ -66,7 +66,7 @@ void AndroidRunControl::start()
         SLOT(handleRemoteOutput(QByteArray)));
     connect(m_runner, SIGNAL(remoteProcessFinished(QString)),
         SLOT(handleRemoteProcessFinished(QString)));
-    appendMessage(tr("Starting remote process..."), Utils::NormalMessageFormat);
+    appendMessage(tr("Starting remote process."), Utils::NormalMessageFormat);
     m_runner->start();
 }
 
diff --git a/src/plugins/android/androidrunfactories.cpp b/src/plugins/android/androidrunfactories.cpp
index 206e44d4aafc19f880800a6a0888115d6049756a..113cf9b1f9ba4463ee1a56d8bf5b8cd98ffbd2ce 100644
--- a/src/plugins/android/androidrunfactories.cpp
+++ b/src/plugins/android/androidrunfactories.cpp
@@ -184,7 +184,7 @@ RunControl *AndroidRunControlFactory::create(RunConfiguration *runConfig,
 
 QString AndroidRunControlFactory::displayName() const
 {
-    return tr("Run on Android device/emulator");
+    return tr("Run on Android device or emulator.");
 }
 
 } // namespace Internal
diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp
index c0b67ae198d63e31ef32872e6a98ceb192c0c353..20a31dfe0054f97e03fb1e2c2c8d952e7cd8cb3a 100644
--- a/src/plugins/android/androidrunner.cpp
+++ b/src/plugins/android/androidrunner.cpp
@@ -96,7 +96,7 @@ void AndroidRunner::checkPID()
 
     if (-1 != m_processPID && pid == -1) {
         m_processPID = -1;
-        emit remoteProcessFinished(tr("\n\n'%1' died").arg(m_packageName));
+        emit remoteProcessFinished(tr("\n\n'%1' died.").arg(m_packageName));
         return;
     }
     m_processPID = pid;
@@ -151,11 +151,11 @@ void AndroidRunner::asyncStart()
                   << QString::fromLatin1("localfilesystem:/data/data/%1/debug-socket").arg(m_packageName);
         adbStarProc.start(AndroidConfigurations::instance().adbToolPath().toString(), arguments);
         if (!adbStarProc.waitForStarted()) {
-            emit remoteProcessFinished(tr("Failed to forward C++ debugging ports. Reason: %1").arg(adbStarProc.errorString()));
+            emit remoteProcessFinished(tr("Failed to forward C++ debugging ports. Reason: %1.").arg(adbStarProc.errorString()));
             return;
         }
         if (!adbStarProc.waitForFinished(-1)) {
-            emit remoteProcessFinished(tr("Failed to forward C++ debugging ports"));
+            emit remoteProcessFinished(tr("Failed to forward C++ debugging ports."));
             return;
         }
         extraParams = QLatin1String("-e native_debug true -e gdbserver_socket +debug-socket");
@@ -167,11 +167,11 @@ void AndroidRunner::asyncStart()
                   << QLatin1String("forward") << port << port; // currently forward to same port on device and host
         adbStarProc.start(AndroidConfigurations::instance().adbToolPath().toString(), arguments);
         if (!adbStarProc.waitForStarted()) {
-            emit remoteProcessFinished(tr("Failed to forward QML debugging ports. Reason: %1").arg(adbStarProc.errorString()));
+            emit remoteProcessFinished(tr("Failed to forward QML debugging ports. Reason: %1.").arg(adbStarProc.errorString()));
             return;
         }
         if (!adbStarProc.waitForFinished(-1)) {
-            emit remoteProcessFinished(tr("Failed to forward QML debugging ports"));
+            emit remoteProcessFinished(tr("Failed to forward QML debugging ports."));
             return;
         }
         extraParams+=QString::fromLatin1(" -e qml_debug true -e qmljsdebugger port:%1")
@@ -196,12 +196,12 @@ void AndroidRunner::asyncStart()
 
     adbStarProc.start(AndroidConfigurations::instance().adbToolPath().toString(), arguments);
     if (!adbStarProc.waitForStarted()) {
-        emit remoteProcessFinished(tr("Failed to start the activity. Reason: %1").arg(adbStarProc.errorString()));
+        emit remoteProcessFinished(tr("Failed to start the activity. Reason: %1.").arg(adbStarProc.errorString()));
         return;
     }
     if (!adbStarProc.waitForFinished(-1)) {
         adbStarProc.terminate();
-        emit remoteProcessFinished(tr("Unable to start '%1'").arg(m_packageName));
+        emit remoteProcessFinished(tr("Unable to start '%1'.").arg(m_packageName));
         return;
     }
     QTime startTime = QTime::currentTime();
@@ -209,7 +209,7 @@ void AndroidRunner::asyncStart()
         checkPID();
     }
     if (m_processPID == -1) {
-        emit remoteProcessFinished(tr("Cannot find %1 process").arg(m_packageName));
+        emit remoteProcessFinished(tr("Cannot find %1 process.").arg(m_packageName));
         return;
     }
 
@@ -246,7 +246,7 @@ void AndroidRunner::stop()
 void AndroidRunner::asyncStop()
 {
     killPID();
-    emit remoteProcessFinished(tr("\n\n'%1' killed").arg(m_packageName));
+    emit remoteProcessFinished(tr("\n\n'%1' killed.").arg(m_packageName));
 }
 
 void AndroidRunner::logcatReadStandardError()
diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp
index 12366ff9d261841bfad63b4b48bbe99ccf860b07..f4dbd73f4328e3c2a48b6555d2e9a9170c123aee 100644
--- a/src/plugins/android/androidsettingswidget.cpp
+++ b/src/plugins/android/androidsettingswidget.cpp
@@ -195,7 +195,7 @@ bool AndroidSettingsWidget::checkSDK(const Utils::FileName &location)
             || (!androidExe.appendPath(QLatin1String("/tools/android" QTC_HOST_EXE_SUFFIX)).toFileInfo().exists()
                 && !androidBat.appendPath(QLatin1String("/tools/android" ANDROID_BAT_SUFFIX)).toFileInfo().exists())
             || !emulator.appendPath(QLatin1String("/tools/emulator" QTC_HOST_EXE_SUFFIX)).toFileInfo().exists()) {
-        QMessageBox::critical(this, tr("Android SDK Folder"), tr("\"%1\" doesn't seem to be an Android SDK top folder").arg(location.toUserOutput()));
+        QMessageBox::critical(this, tr("Android SDK Folder"), tr("\"%1\" does not seem to be an Android SDK top folder.").arg(location.toUserOutput()));
         return false;
     }
     return true;
@@ -216,7 +216,7 @@ bool AndroidSettingsWidget::checkNDK(const Utils::FileName &location)
     if (!platformPath.appendPath(QLatin1String("platforms")).toFileInfo().exists()
             || !toolChainPath.appendPath(QLatin1String("toolchains")).toFileInfo().exists()
             || !sourcesPath.appendPath(QLatin1String("sources/cxx-stl")).toFileInfo().exists()) {
-        QMessageBox::critical(this, tr("Android SDK Folder"), tr("\"%1\" doesn't seem to be an Android NDK top folder").arg(location.toUserOutput()));
+        QMessageBox::critical(this, tr("Android SDK Folder"), tr("\"%1\" does not seem to be an Android NDK top folder.").arg(location.toUserOutput()));
         return false;
     }
     m_androidConfig.ndkLocation = location;
diff --git a/src/plugins/android/androidsettingswidget.ui b/src/plugins/android/androidsettingswidget.ui
index 1e7cba16af95ec1e32694b15d2248c201242d4a9..9d1c4f62f4d5f1242c31e326fa387fbaba3c61c2 100644
--- a/src/plugins/android/androidsettingswidget.ui
+++ b/src/plugins/android/androidsettingswidget.ui
@@ -59,7 +59,7 @@
      <item row="2" column="0">
       <widget class="QLabel" name="NDKToolchainVersionLabel">
        <property name="text">
-        <string>Android NDK toolchain version:</string>
+        <string>Android NDK tool chain version:</string>
        </property>
        <property name="alignment">
         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -92,7 +92,7 @@
      <item row="4" column="0">
       <widget class="QLabel" name="GdbLocationLabel">
        <property name="text">
-        <string>arm GDB location:</string>
+        <string>ARM GDB location:</string>
        </property>
        <property name="alignment">
         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -112,7 +112,7 @@
      <item row="5" column="0">
       <widget class="QLabel" name="GdbserverLocationLabel">
        <property name="text">
-        <string>arm GDBserver location:</string>
+        <string>ARM GDB server location:</string>
        </property>
        <property name="alignment">
         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -152,7 +152,7 @@
      <item row="7" column="0">
       <widget class="QLabel" name="GdbserverLocationLabelx86">
        <property name="text">
-        <string>x86 GDBserver location:</string>
+        <string>x86 GDB server location:</string>
        </property>
        <property name="alignment">
         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp
index ce28543c22130b9256dfb6a17243092307e42a98..fc75eff62baf6862797feee345d08556a5ebb27a 100644
--- a/src/plugins/bineditor/bineditorplugin.cpp
+++ b/src/plugins/bineditor/bineditorplugin.cpp
@@ -224,7 +224,7 @@ public:
         QFile file(fileName);
         quint64 size = static_cast<quint64>(file.size());
         if (size == 0) {
-            QString msg = tr("The Binary Editor can not open empty files.");
+            QString msg = tr("The Binary Editor cannot open empty files.");
             if (errorString)
                 *errorString = msg;
             else
diff --git a/src/plugins/clearcase/activityselector.cpp b/src/plugins/clearcase/activityselector.cpp
index d677881edc053d3e84c5495d318afe40777140d1..d0fce680109e7723d573be6b2ede16a23a545a5d 100644
--- a/src/plugins/clearcase/activityselector.cpp
+++ b/src/plugins/clearcase/activityselector.cpp
@@ -54,7 +54,7 @@ ActivitySelector::ActivitySelector(QWidget *parent) :
     QHBoxLayout *hboxLayout = new QHBoxLayout(this);
     hboxLayout->setContentsMargins(0, 0, 0, 0);
 
-    QLabel *lblActivity = new QLabel(tr("Select &Activity:"));
+    QLabel *lblActivity = new QLabel(tr("Select &activity:"));
     lblActivity->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
     hboxLayout->addWidget(lblActivity);
 
diff --git a/src/plugins/clearcase/checkoutdialog.ui b/src/plugins/clearcase/checkoutdialog.ui
index 73f6a398c529f96d82a47672cc5c4199dac63b7a..3af4fa0eeb30aa149ab27dbd8f682344e0c2f0f9 100644
--- a/src/plugins/clearcase/checkoutdialog.ui
+++ b/src/plugins/clearcase/checkoutdialog.ui
@@ -24,7 +24,7 @@
    <item>
     <widget class="QLabel" name="lblComment">
      <property name="text">
-      <string>&amp;Checkout Comment:</string>
+      <string>&amp;Checkout comment:</string>
      </property>
      <property name="buddy">
       <cstring>txtComment</cstring>
diff --git a/src/plugins/clearcase/versionselector.ui b/src/plugins/clearcase/versionselector.ui
index b120bcf944a6c358a50b619d00a8c34cbe3c5457..d6afca55901a95aef9503de88c9b71ce238f313e 100644
--- a/src/plugins/clearcase/versionselector.ui
+++ b/src/plugins/clearcase/versionselector.ui
@@ -49,7 +49,7 @@
      <item row="1" column="0">
       <widget class="QLabel" name="loadedCreatedByHeaderLabel">
        <property name="text">
-        <string>Created By:</string>
+        <string>Created by:</string>
        </property>
       </widget>
      </item>
@@ -63,7 +63,7 @@
      <item row="2" column="0">
       <widget class="QLabel" name="loadedCreatedOnHeaderLabel">
        <property name="text">
-        <string>Created On:</string>
+        <string>Created on:</string>
        </property>
       </widget>
      </item>
@@ -91,7 +91,7 @@
      <item row="1" column="0">
       <widget class="QLabel" name="updatedCreatedByHeaderLabel">
        <property name="text">
-        <string>Created By:</string>
+        <string>Created by:</string>
        </property>
       </widget>
      </item>
@@ -105,7 +105,7 @@
      <item row="2" column="0">
       <widget class="QLabel" name="updatedCreatedOnHeaderLabel">
        <property name="text">
-        <string extracomment="Date">Created On:</string>
+        <string extracomment="Date">Created on:</string>
        </property>
       </widget>
      </item>
diff --git a/src/plugins/coreplugin/idocument.cpp b/src/plugins/coreplugin/idocument.cpp
index 2d5e7d3e3c28619a14e923639bacb86d4b241d44..d79facc78c8363b2ba6eea7b39d0366207d51446 100644
--- a/src/plugins/coreplugin/idocument.cpp
+++ b/src/plugins/coreplugin/idocument.cpp
@@ -88,7 +88,7 @@ void IDocument::setRestoredFrom(const QString &name)
     m_restored = true;
     InfoBarEntry info(QLatin1String(kRestoredAutoSave),
           tr("File was restored from auto-saved copy. "
-             "Use <i>Save</i> to confirm, or <i>Revert to Saved</i> to discard changes."));
+             "Select Save to confirm or Revert to Saved to discard changes."));
     infoBar()->addInfo(info);
 }
 
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index afc34b6ea0e5594dcb7bb6715616df372eaf2d11..d8420a3e055ce2b0b56bba958e076ce3c3be8161 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -186,7 +186,7 @@ MainWindow::MainWindow() :
     QCoreApplication::setApplicationVersion(QLatin1String(Core::Constants::IDE_VERSION_LONG));
     QCoreApplication::setOrganizationName(QLatin1String(Constants::IDE_SETTINGSVARIANT_STR));
     QString baseName = QApplication::style()->objectName();
-#ifdef Q_WS_X11
+#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
     if (baseName == QLatin1String("windows")) {
         // Sometimes we get the standard windows 95 style as a fallback
         // e.g. if we are running on a KDE4 desktop
diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp
index 88ca5f89287219b7c40b23fbe52b0f0e4e73be4d..d764cce11490d4c82e8b2a3550eb961b362c46cd 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.cpp
+++ b/src/plugins/cppeditor/cpptypehierarchy.cpp
@@ -124,7 +124,6 @@ private:
 // CppTypeHierarchyWidget
 CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
     QWidget(0),
-    m_cppEditor(0),
     m_treeView(0),
     m_model(0),
     m_delegate(0)
@@ -133,9 +132,7 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
     layout->setMargin(0);
     layout->setSpacing(0);
 
-    if (CPPEditor *cppEditor = qobject_cast<CPPEditor *>(editor)) {
-        m_cppEditor = static_cast<CPPEditorWidget *>(cppEditor->widget());
-
+    if (qobject_cast<CPPEditor *>(editor)) {
         m_inspectedClass = new CppClassLabel(this);
         m_inspectedClass->setMargin(5);
         layout->addWidget(m_inspectedClass);
@@ -165,27 +162,18 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
 CppTypeHierarchyWidget::~CppTypeHierarchyWidget()
 {}
 
-bool CppTypeHierarchyWidget::handleEditorChange(Core::IEditor *editor)
-{
-    if (CPPEditor *cppEditor = qobject_cast<CPPEditor *>(editor)) {
-        if (m_cppEditor) {
-            m_cppEditor = static_cast<CPPEditorWidget *>(cppEditor->widget());
-            return true;
-        }
-    } else if (!m_cppEditor) {
-        return true;
-    }
-    return false;
-}
-
 void CppTypeHierarchyWidget::perform()
 {
-    if (!m_cppEditor)
+    CPPEditor *editor = qobject_cast<CPPEditor *>(Core::EditorManager::instance()->currentEditor());
+    if (!editor)
+        return;
+    CPPEditorWidget *widget = qobject_cast<CPPEditorWidget *>(editor->widget());
+    if (!widget)
         return;
 
     m_model->clear();
 
-    CppElementEvaluator evaluator(m_cppEditor);
+    CppElementEvaluator evaluator(widget);
     evaluator.setLookupBaseClasses(true);
     evaluator.setLookupDerivedClasses(true);
     evaluator.execute();
@@ -218,7 +206,13 @@ void CppTypeHierarchyWidget::buildHierarchy(const CppClass &cppClass, QStandardI
 
 void CppTypeHierarchyWidget::onItemClicked(const QModelIndex &index)
 {
-    m_cppEditor->openLink(index.data(LinkRole).value<TextEditor::BaseTextEditorWidget::Link>());
+    const TextEditor::BaseTextEditorWidget::Link link
+            = index.data(LinkRole).value<TextEditor::BaseTextEditorWidget::Link>();
+    if (!link.fileName.isEmpty())
+        TextEditor::BaseTextEditorWidget::openEditorAt(link.fileName,
+                                                       link.line,
+                                                       link.column,
+                                                       Constants::CPPEDITOR_ID);
 }
 
 // CppTypeHierarchyStackedWidget
@@ -227,9 +221,6 @@ CppTypeHierarchyStackedWidget::CppTypeHierarchyStackedWidget(QWidget *parent) :
     m_typeHiearchyWidgetInstance(new CppTypeHierarchyWidget(Core::EditorManager::currentEditor()))
 {
     addWidget(m_typeHiearchyWidgetInstance);
-
-    connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)),
-            this, SLOT(editorChanged(Core::IEditor*)));
 }
 
 CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget()
@@ -237,17 +228,6 @@ CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget()
     delete m_typeHiearchyWidgetInstance;
 }
 
-void CppTypeHierarchyStackedWidget::editorChanged(Core::IEditor *editor)
-{
-    if (!m_typeHiearchyWidgetInstance->handleEditorChange(editor)) {
-        CppTypeHierarchyWidget *replacement = new CppTypeHierarchyWidget(editor);
-        removeWidget(m_typeHiearchyWidgetInstance);
-        m_typeHiearchyWidgetInstance->deleteLater();
-        m_typeHiearchyWidgetInstance = replacement;
-        addWidget(m_typeHiearchyWidgetInstance);
-    }
-}
-
 // CppTypeHierarchyFactory
 CppTypeHierarchyFactory::CppTypeHierarchyFactory()
 {}
diff --git a/src/plugins/cppeditor/cpptypehierarchy.h b/src/plugins/cppeditor/cpptypehierarchy.h
index 2d862d69044f0df5069110f1e53a2190d72b672d..23acb0e3e5fcc245cebed5521d24a0946c717f12 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.h
+++ b/src/plugins/cppeditor/cpptypehierarchy.h
@@ -69,8 +69,6 @@ public:
     CppTypeHierarchyWidget(Core::IEditor *editor);
     virtual ~CppTypeHierarchyWidget();
 
-    bool handleEditorChange(Core::IEditor *editor);
-
 public slots:
     void perform();
 
@@ -97,9 +95,6 @@ public:
     CppTypeHierarchyStackedWidget(QWidget *parent = 0);
     virtual ~CppTypeHierarchyStackedWidget();
 
-public slots:
-    void editorChanged(Core::IEditor* editor);
-
 private:
     CppTypeHierarchyWidget *m_typeHiearchyWidgetInstance;
 };
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp
index a6681bb39813bf22fd2acc839911b95ce0267ada..8f0b5ecbe3b1a4a4eafd70e04ffd0c4b28035c57 100644
--- a/src/plugins/cpptools/cppcompletion_test.cpp
+++ b/src/plugins/cpptools/cppcompletion_test.cpp
@@ -231,7 +231,7 @@ void CppToolsPlugin::test_completion_template_1()
     QVERIFY(!completions.contains("func"));
 }
 
-void CppToolsPlugin::test_completion_template_as_base()
+void CppToolsPlugin::test_completion()
 {
     QFETCH(QByteArray, code);
     QFETCH(QStringList, expectedCompletions);
@@ -253,6 +253,11 @@ void CppToolsPlugin::test_completion_template_as_base()
     QCOMPARE(actualCompletions, expectedCompletions);
 }
 
+void CppToolsPlugin::test_completion_template_as_base()
+{
+    test_completion();
+}
+
 void CppToolsPlugin::test_completion_template_as_base_data()
 {
     QTest::addColumn<QByteArray>("code");
@@ -399,3 +404,391 @@ void CppToolsPlugin::test_completion_template_as_base_data()
     completions.append("otherMember");
     QTest::newRow("case: base as template name in non-template") << code << completions;
 }
+
+void CppToolsPlugin::test_completion_use_global_identifier_as_base_class()
+{
+    test_completion();
+}
+
+void CppToolsPlugin::test_completion_use_global_identifier_as_base_class_data()
+{
+    QTest::addColumn<QByteArray>("code");
+    QTest::addColumn<QStringList>("expectedCompletions");
+
+    QByteArray code;
+    QStringList completions;
+
+    code = "\n"
+            "struct Global\n"
+            "{\n"
+            "    int int_global;\n"
+            "};\n"
+            "\n"
+            "struct Final : ::Global\n"
+            "{\n"
+            "   int int_final;\n"
+            "};\n"
+            "\n"
+            "Final c;\n"
+            "@\n"
+            "// padding so we get the scope right\n";
+
+    completions.append("int_global");
+    completions.append("int_final");
+    completions.append("Final");
+    completions.append("Global");
+    QTest::newRow("case: derived as global and base as global") << code << completions;
+
+    completions.clear();
+
+    code = "\n"
+            "struct Global\n"
+            "{\n"
+            "    int int_global;\n"
+            "};\n"
+            "\n"
+            "namespace NS\n"
+            "{\n"
+            "struct Final : ::Global\n"
+            "{\n"
+            "   int int_final;\n"
+            "};\n"
+            "}\n"
+            "\n"
+            "NS::Final c;\n"
+            "@\n"
+            "// padding so we get the scope right\n";
+
+    completions.append("int_global");
+    completions.append("int_final");
+    completions.append("Final");
+    completions.append("Global");
+    QTest::newRow("case: derived is inside namespace, base as global")
+            << code << completions;
+
+    completions.clear();
+
+    //this test does not work due to the bug QTCREATORBUG-7912
+
+
+//    code = "\n"
+//            "struct Global\n"
+//            "{\n"
+//            "    int int_global;\n"
+//            "};\n"
+//            "\n"
+//            "template <typename T>\n"
+//            "struct Enclosing\n"
+//            "{\n"
+//            "struct Final : ::Global\n"
+//            "{\n"
+//            "   int int_final;\n"
+//            "};\n"
+//            "}\n"
+//            "\n"
+//            "Enclosing<int>::Final c;\n"
+//            "@\n"
+//            "// padding so we get the scope right\n";
+
+//    completions.append("int_global");
+//    completions.append("int_final");
+//    completions.append("Final");
+//    completions.append("Global");
+//    QTest::newRow("case: derived is enclosed by template, base as global")
+//    << code << completions;
+
+//    completions.clear();
+}
+
+void CppToolsPlugin::test_completion_base_class_has_name_the_same_as_derived()
+{
+    test_completion();
+}
+
+void CppToolsPlugin::test_completion_base_class_has_name_the_same_as_derived_data()
+{
+    QTest::addColumn<QByteArray>("code");
+    QTest::addColumn<QStringList>("expectedCompletions");
+
+    QByteArray code;
+    QStringList completions;
+
+    code = "\n"
+            "struct A : A\n"
+            "{\n"
+            "   int int_a;\n"
+            "};\n"
+            "\n"
+            "A c;\n"
+            "@\n"
+            "// padding so we get the scope right\n";
+
+    completions.append("int_a");
+    completions.append("A");
+    QTest::newRow("case: base class is derived class") << code << completions;
+
+    completions.clear();
+
+    code = "\n"
+            "namespace NS\n"
+            "{\n"
+            "struct A : A\n"
+            "{\n"
+            "   int int_a;\n"
+            "};\n"
+            "}\n"
+            "\n"
+            "NS::A c;\n"
+            "@\n"
+            "// padding so we get the scope right\n";
+
+    completions.append("int_a");
+    completions.append("A");
+    QTest::newRow("case: base class is derived class. class is in namespace")
+            << code << completions;
+
+    completions.clear();
+
+    code = "\n"
+            "namespace NS\n"
+            "{\n"
+            "struct A : NS::A\n"
+            "{\n"
+            "   int int_a;\n"
+            "};\n"
+            "}\n"
+            "\n"
+            "NS::A c;\n"
+            "@\n"
+            "// padding so we get the scope right\n";
+
+    completions.append("int_a");
+    completions.append("A");
+    QTest::newRow("case: base class is derived class. class is in namespace. "
+                  "use scope operator for base class") << code << completions;
+
+    completions.clear();
+
+    code = "\n"
+            "namespace NS1\n"
+            "{\n"
+            "struct A\n"
+            "{\n"
+            "   int int_ns1_a;\n"
+            "};\n"
+            "}\n"
+            "namespace NS2\n"
+            "{\n"
+            "struct A : NS1::A\n"
+            "{\n"
+            "   int int_ns2_a;\n"
+            "};\n"
+            "}\n"
+            "\n"
+            "NS2::A c;\n"
+            "@\n"
+            "// padding so we get the scope right\n";
+
+    completions.append("int_ns1_a");
+    completions.append("int_ns2_a");
+    completions.append("A");
+    QTest::newRow("case: base class has the same name as derived but in different namespace")
+            << code << completions;
+
+    completions.clear();
+
+    code = "\n"
+            "struct Enclosing\n"
+            "{\n"
+            "struct A\n"
+            "{\n"
+            "   int int_enclosing_a;\n"
+            "};\n"
+            "};\n"
+            "namespace NS2\n"
+            "{\n"
+            "struct A : Enclosing::A\n"
+            "{\n"
+            "   int int_ns2_a;\n"
+            "};\n"
+            "}\n"
+            "\n"
+            "NS2::A c;\n"
+            "@\n"
+            "// padding so we get the scope right\n";
+
+    completions.append("int_enclosing_a");
+    completions.append("int_ns2_a");
+    completions.append("A");
+    QTest::newRow("case: base class has the same name as derived(in namespace) "
+                  "but is nested by different class") << code << completions;
+
+    completions.clear();
+
+    code = "\n"
+            "struct EnclosingBase\n"
+            "{\n"
+            "struct A\n"
+            "{\n"
+            "   int int_enclosing_base_a;\n"
+            "};\n"
+            "};\n"
+            "struct EnclosingDerived\n"
+            "{\n"
+            "struct A : EnclosingBase::A\n"
+            "{\n"
+            "   int int_enclosing_derived_a;\n"
+            "};\n"
+            "};\n"
+            "\n"
+            "EnclosingDerived::A c;\n"
+            "@\n"
+            "// padding so we get the scope right\n";
+
+    completions.append("int_enclosing_base_a");
+    completions.append("int_enclosing_derived_a");
+    completions.append("A");
+    QTest::newRow("case: base class has the same name as derived(nested) "
+                  "but is nested by different class") << code << completions;
+
+    completions.clear();
+
+    code = "\n"
+            "template <typename T>\n"
+            "struct A : A\n"
+            "{\n"
+            "   int int_a;\n"
+            "};\n"
+            "\n"
+            "A<int> c;\n"
+            "@\n"
+            "// padding so we get the scope right\n";
+
+    completions.append("int_a");
+    completions.append("A");
+    QTest::newRow("case: base class is derived class. class is a template")
+            << code << completions;
+
+    completions.clear();
+
+}
+
+
+void CppToolsPlugin::test_completion_cyclic_inheritance()
+{
+    test_completion();
+}
+
+void CppToolsPlugin::test_completion_cyclic_inheritance_data()
+{
+    QTest::addColumn<QByteArray>("code");
+    QTest::addColumn<QStringList>("expectedCompletions");
+
+    QByteArray code;
+    QStringList completions;
+
+    code = "\n"
+            "struct B;\n"
+            "struct A : B { int _a; };\n"
+            "struct B : A { int _b; };\n"
+            "\n"
+            "A c;\n"
+            "@\n"
+            ;
+    completions.append("A");
+    completions.append("_a");
+    completions.append("B");
+    completions.append("_b");
+    QTest::newRow("case: direct cyclic inheritance") << code << completions;
+
+    completions.clear();
+    code = "\n"
+            "struct C;\n"
+            "struct A : C { int _a; };\n"
+            "struct B : A { int _b; };\n"
+            "struct C : B { int _c; };\n"
+            "\n"
+            "A c;\n"
+            "@\n"
+            ;
+    completions.append("A");
+    completions.append("_a");
+    completions.append("B");
+    completions.append("_b");
+    completions.append("C");
+    completions.append("_c");
+    QTest::newRow("case: indirect cyclic inheritance") << code << completions;
+
+    completions.clear();
+    code = "\n"
+            "struct B;\n"
+            "struct A : B { int _a; };\n"
+            "struct C { int _c; };\n"
+            "struct B : C, A { int _b; };\n"
+            "\n"
+            "A c;\n"
+            "@\n"
+            ;
+    completions.append("A");
+    completions.append("_a");
+    completions.append("B");
+    completions.append("_b");
+    completions.append("C");
+    completions.append("_c");
+    QTest::newRow("case: indirect cyclic inheritance") << code << completions;
+
+    completions.clear();
+    code = "\n"
+            "template< typename T > struct C;\n"
+            "template< typename T, typename S > struct D : C< S >\n"
+            "{\n"
+            "   T _d_t;\n"
+            "   S _d_s;\n"
+            "};\n"
+            "template< typename T > struct C : D< T, int >\n"
+            "{\n"
+            "   T _c_t;\n"
+            "};\n"
+            "\n"
+            "D<int, float> c;\n"
+            "@\n"
+            ;
+    completions.append("D");
+    completions.append("_d_t");
+    completions.append("_d_s");
+    completions.append("C");
+    completions.append("_c_t");
+    QTest::newRow("case: direct cyclic inheritance with templates")
+            << code << completions;
+
+    completions.clear();
+    code = "\n"
+            "template< typename T > struct C;\n"
+            "template< typename T, typename S > struct D : C< S >\n"
+            "{\n"
+            "   T _d_t;\n"
+            "   S _d_s;\n"
+            "};\n"
+            "template< typename T > struct B : D< T, int >\n"
+            "{\n"
+            "   T _b_t;\n"
+            "};\n"
+            "template< typename T > struct C : B<T>\n"
+            "{\n"
+            "   T _c_t;\n"
+            "};\n"
+            "\n"
+            "D<int, float> c;\n"
+            "@\n"
+            ;
+    completions.append("D");
+    completions.append("_d_t");
+    completions.append("_d_s");
+    completions.append("C");
+    completions.append("_c_t");
+    completions.append("B");
+    completions.append("_b_t");
+    QTest::newRow("case: indirect cyclic inheritance with templates")
+            << code << completions;
+
+}
diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h
index ba88d11896e11912095a035b451f7f6ce5329f4e..d84319db03b55e24298afec5ecee1bfc978e469c 100644
--- a/src/plugins/cpptools/cpptoolsplugin.h
+++ b/src/plugins/cpptools/cpptoolsplugin.h
@@ -77,6 +77,7 @@ private slots:
     void switchHeaderSource();
 
 #ifdef WITH_TESTS
+
     // codegen tests
     void test_codegen_public_in_empty_class();
     void test_codegen_public_in_nonempty_class();
@@ -95,6 +96,15 @@ private slots:
     void test_completion_template_1();
     void test_completion_template_as_base();
     void test_completion_template_as_base_data();
+    void test_completion_use_global_identifier_as_base_class();
+    void test_completion_use_global_identifier_as_base_class_data();
+    void test_completion_base_class_has_name_the_same_as_derived();
+    void test_completion_base_class_has_name_the_same_as_derived_data();
+    void test_completion_cyclic_inheritance();
+    void test_completion_cyclic_inheritance_data();
+
+private:
+    void test_completion();
 #endif
 
 private:
diff --git a/src/plugins/debugger/debuggerkitconfigwidget.h b/src/plugins/debugger/debuggerkitconfigwidget.h
index 735d02fd01f48d9b03c65c67c62cec10deedf5f2..3c8658ca307d0cdd74137afff314c33ca8ac2353 100644
--- a/src/plugins/debugger/debuggerkitconfigwidget.h
+++ b/src/plugins/debugger/debuggerkitconfigwidget.h
@@ -62,7 +62,7 @@ class DebuggerKitConfigWidget : public ProjectExplorer::KitConfigWidget
     Q_OBJECT
 
 public:
-    DebuggerKitConfigWidget(ProjectExplorer::Kit *p,
+    DebuggerKitConfigWidget(ProjectExplorer::Kit *k,
                             const DebuggerKitInformation *ki,
                             QWidget *parent = 0);
 
diff --git a/src/plugins/debugger/debuggerkitinformation.cpp b/src/plugins/debugger/debuggerkitinformation.cpp
index 5b86f09c323ab293a2d9cd9a2c7c366feedc0d53..f497e2b19ed86fd69762efc49aa8f15654cf487f 100644
--- a/src/plugins/debugger/debuggerkitinformation.cpp
+++ b/src/plugins/debugger/debuggerkitinformation.cpp
@@ -296,8 +296,27 @@ DebuggerKitInformation::DebuggerItem DebuggerKitInformation::variantToItem(const
     }
     QTC_ASSERT(v.type() == QVariant::Map, return result);
     const QVariantMap vmap = v.toMap();
-    result.binary = Utils::FileName::fromString(vmap.value(QLatin1String(binaryKeyC)).toString());
     result.engineType = static_cast<DebuggerEngineType>(vmap.value(QLatin1String(engineTypeKeyC)).toInt());
+    QString binary = vmap.value(QLatin1String(binaryKeyC)).toString();
+    // Check for special 'auto' entry for binary written by the sdktool during
+    // installation. Try to autodetect.
+    if (binary == QLatin1String("auto")) {
+        binary.clear();
+        switch (result.engineType) {
+        case Debugger::GdbEngineType: // Auto-detect system gdb on Unix
+            if (Abi::hostAbi().os() != Abi::WindowsOS)
+                binary = Environment::systemEnvironment().searchInPath(QLatin1String("gdb"));
+            break;
+        case Debugger::CdbEngineType: { // Auto-detect system CDB on Windows.
+             const QPair<QString, QString> cdbs = autoDetectCdbDebugger();
+             binary = cdbs.second.isEmpty() ? cdbs.first : cdbs.second;
+        }
+            break;
+        default:
+            break;
+        }
+    }
+    result.binary = Utils::FileName::fromString(binary);
     return result;
 }
 
diff --git a/src/plugins/debugger/debuggerkitinformation.h b/src/plugins/debugger/debuggerkitinformation.h
index 93f632be76c7a219ec58ea045577964c9dbc174b..3fdfb165e7089ad7318225fde2ab229b77184bce 100644
--- a/src/plugins/debugger/debuggerkitinformation.h
+++ b/src/plugins/debugger/debuggerkitinformation.h
@@ -77,13 +77,13 @@ public:
     static DebuggerItem debuggerItem(const ProjectExplorer::Kit *k);
     static void setDebuggerItem(ProjectExplorer::Kit *k, const DebuggerItem &item);
 
-    static Utils::FileName debuggerCommand(const ProjectExplorer::Kit *p)
-        { return debuggerItem(p).binary; }
+    static Utils::FileName debuggerCommand(const ProjectExplorer::Kit *k)
+        { return debuggerItem(k).binary; }
 
-    static void setDebuggerCommand(ProjectExplorer::Kit *p, const Utils::FileName &command);
+    static void setDebuggerCommand(ProjectExplorer::Kit *k, const Utils::FileName &command);
 
-    static DebuggerEngineType engineType(const ProjectExplorer::Kit *p)
-        { return debuggerItem(p).engineType; }
+    static DebuggerEngineType engineType(const ProjectExplorer::Kit *k)
+        { return debuggerItem(k).engineType; }
 
     static void setEngineType(ProjectExplorer::Kit *k, DebuggerEngineType type);
 
diff --git a/src/plugins/debugger/debuggertooltipmanager.cpp b/src/plugins/debugger/debuggertooltipmanager.cpp
index d6c956250edd1206d3cb9fb7b00facc87ea14acc..7b03136e479f006393bb46605d16c9aa958143c8 100644
--- a/src/plugins/debugger/debuggertooltipmanager.cpp
+++ b/src/plugins/debugger/debuggertooltipmanager.cpp
@@ -691,9 +691,7 @@ void DebuggerToolTipWidget::copy()
 {
     const QString clipboardText = clipboardContents();
     QClipboard *clipboard = QApplication::clipboard();
-#ifdef Q_WS_X11
     clipboard->setText(clipboardText, QClipboard::Selection);
-#endif
     clipboard->setText(clipboardText, QClipboard::Clipboard);
 }
 
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index d96a7e711ed00c8a483816ae3f9afbba94604556..d589d7e68a18a3676f40cfc940f7a7754850d919 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -221,7 +221,7 @@ public:
     QAction *createAction(QObject *parent) const
     {
         QAction *action = new QAction(DebuggerPlugin::tr("Install &Debug Information"), parent);
-        action->setToolTip(DebuggerPlugin::tr("This tries to install missing debug information."));
+        action->setToolTip(DebuggerPlugin::tr("Tries to install missing debug information."));
         return action;
     }
 
@@ -302,7 +302,7 @@ QString GdbEngine::errorMessage(QProcess::ProcessError error)
     switch (error) {
         case QProcess::FailedToStart:
             return tr("The gdb process failed to start. Either the "
-                "invoked program '%1' is missing, or you may have insufficient "
+                "invoked program \"%1\" is missing, or you may have insufficient "
                 "permissions to invoke the program.\n%2")
                 .arg(m_gdb, gdbProc()->errorString());
         case QProcess::Crashed:
@@ -1053,7 +1053,7 @@ void GdbEngine::commandTimeout()
             "to a command within %n second(s). This could mean it is stuck "
             "in an endless loop or taking longer than expected to perform "
             "the operation.\nYou can choose between waiting "
-            "longer or abort debugging.", 0, timeOut / 1000);
+            "longer or aborting debugging.", 0, timeOut / 1000);
         QMessageBox *mb = showMessageBox(QMessageBox::Critical,
             tr("GDB not responding"), msg,
             QMessageBox::Ok | QMessageBox::Cancel);
@@ -2095,7 +2095,7 @@ int GdbEngine::currentFrame() const
 
 static QString msgNoGdbBinaryForToolChain(const Abi &tc)
 {
-    return GdbEngine::tr("There is no gdb binary available for binaries in format '%1'")
+    return GdbEngine::tr("There is no GDB binary available for binaries in format '%1'")
         .arg(tc.toString());
 }
 
diff --git a/src/plugins/debugger/moduleshandler.cpp b/src/plugins/debugger/moduleshandler.cpp
index 10786d29dff4e3220e2bd1cb5e38634e711766b9..890146f05124f45b0ad16b805650a874c74fe631 100644
--- a/src/plugins/debugger/moduleshandler.cpp
+++ b/src/plugins/debugger/moduleshandler.cpp
@@ -80,12 +80,12 @@ QVariant ModulesModel::headerData(int section,
 {
     if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
         static QString headers[] = {
-            ModulesHandler::tr("Module name") + QLatin1String("        "),
-            ModulesHandler::tr("Module path") + QLatin1String("        "),
-            ModulesHandler::tr("Symbols read") + QLatin1String("        "),
-            ModulesHandler::tr("Symbols type") + QLatin1String("        "),
-            ModulesHandler::tr("Start address") + QLatin1String("        "),
-            ModulesHandler::tr("End address") + QLatin1String("        ")
+            ModulesHandler::tr("Module Name") + QLatin1String("        "),
+            ModulesHandler::tr("Module Path") + QLatin1String("        "),
+            ModulesHandler::tr("Symbols Read") + QLatin1String("        "),
+            ModulesHandler::tr("Symbols Type") + QLatin1String("        "),
+            ModulesHandler::tr("Start Address") + QLatin1String("        "),
+            ModulesHandler::tr("End Address") + QLatin1String("        ")
         };
         return headers[section];
     }
@@ -123,22 +123,22 @@ QVariant ModulesModel::data(const QModelIndex &index, int role) const
         case 2:
             if (role == Qt::DisplayRole)
                 switch (module.symbolsRead) {
-                    case Module::UnknownReadState: return ModulesHandler::tr("unknown");
-                    case Module::ReadFailed: return ModulesHandler::tr("no");
-                    case Module::ReadOk: return ModulesHandler::tr("yes");
+                    case Module::UnknownReadState: return ModulesHandler::tr("Unknown");
+                    case Module::ReadFailed: return ModulesHandler::tr("No");
+                    case Module::ReadOk: return ModulesHandler::tr("Yes");
                 }
             break;
         case 3:
             if (role == Qt::DisplayRole)
                 switch (module.elfData.symbolsType) {
                     case UnknownSymbols:
-                        return ModulesHandler::tr("unknown");
+                        return ModulesHandler::tr("Unknown");
                     case NoSymbols:
-                        return ModulesHandler::tr("none");
+                        return ModulesHandler::tr("None");
                     case PlainSymbols:
-                        return ModulesHandler::tr("plain");
+                        return ModulesHandler::tr("Plain");
                     case FastSymbols:
-                        return ModulesHandler::tr("fast");
+                        return ModulesHandler::tr("Fast");
                     case LinkedSymbols:
                         return ModulesHandler::tr("debuglnk");
                     case BuildIdSymbols:
diff --git a/src/plugins/debugger/qml/qmladapter.cpp b/src/plugins/debugger/qml/qmladapter.cpp
index 05da501875d9de1c5d22fde8c51dfb92f49f4671..eb6747eb01332353fa38e5ac9bc61d76e5326ed1 100644
--- a/src/plugins/debugger/qml/qmladapter.cpp
+++ b/src/plugins/debugger/qml/qmladapter.cpp
@@ -144,20 +144,20 @@ void QmlAdapter::connectionStateChanged()
     switch (m_conn->state()) {
     case QAbstractSocket::UnconnectedState:
     {
-        showConnectionStatusMessage(tr("disconnected.\n\n"));
+        showConnectionStatusMessage(tr("Disconnected.\n\n"));
         emit disconnected();
 
         break;
     }
     case QAbstractSocket::HostLookupState:
-        showConnectionStatusMessage(tr("resolving host..."));
+        showConnectionStatusMessage(tr("Resolving host."));
         break;
     case QAbstractSocket::ConnectingState:
-        showConnectionStatusMessage(tr("connecting to debug server..."));
+        showConnectionStatusMessage(tr("Connecting to debug server."));
         break;
     case QAbstractSocket::ConnectedState:
     {
-        showConnectionStatusMessage(tr("connected.\n"));
+        showConnectionStatusMessage(tr("Connected.\n"));
 
         m_connectionTimer.stop();
 
@@ -166,7 +166,7 @@ void QmlAdapter::connectionStateChanged()
         break;
     }
     case QAbstractSocket::ClosingState:
-        showConnectionStatusMessage(tr("closing..."));
+        showConnectionStatusMessage(tr("Closing."));
         break;
     case QAbstractSocket::BoundState:
     case QAbstractSocket::ListeningState:
diff --git a/src/plugins/debugger/qml/qmlinspectoradapter.cpp b/src/plugins/debugger/qml/qmlinspectoradapter.cpp
index 9528a1d5aff69d620fa6fefb0c978e2ab2d97786..677bbe99975a70576cebccc8c481fb75fa13e899 100644
--- a/src/plugins/debugger/qml/qmlinspectoradapter.cpp
+++ b/src/plugins/debugger/qml/qmlinspectoradapter.cpp
@@ -42,6 +42,7 @@
 #include <coreplugin/editormanager/ieditor.h>
 #include <coreplugin/icore.h>
 #include <qmldebug/declarativeenginedebugclient.h>
+#include <qmldebug/declarativeenginedebugclientv2.h>
 #include <qmldebug/declarativetoolsclient.h>
 #include <qmldebug/qmlenginedebugclient.h>
 #include <qmldebug/qmltoolsclient.h>
@@ -96,13 +97,23 @@ QmlInspectorAdapter::QmlInspectorAdapter(QmlAdapter *debugAdapter,
     connect(engineClient2, SIGNAL(newStatus(QmlDebug::ClientStatus)),
             this, SLOT(engineClientStatusChanged(QmlDebug::ClientStatus)));
 
+    DeclarativeEngineDebugClientV2 *engineClient3
+            = new DeclarativeEngineDebugClientV2(connection);
+    connect(engineClient3, SIGNAL(newStatus(QmlDebug::ClientStatus)),
+            this, SLOT(clientStatusChanged(QmlDebug::ClientStatus)));
+    connect(engineClient3, SIGNAL(newStatus(QmlDebug::ClientStatus)),
+            this, SLOT(engineClientStatusChanged(QmlDebug::ClientStatus)));
+
     m_engineClients.insert(engineClient1->name(), engineClient1);
     m_engineClients.insert(engineClient2->name(), engineClient2);
+    m_engineClients.insert(engineClient3->name(), engineClient3);
 
     if (engineClient1->status() == QmlDebug::Enabled)
         setActiveEngineClient(engineClient1);
     if (engineClient2->status() == QmlDebug::Enabled)
         setActiveEngineClient(engineClient2);
+    if (engineClient3->status() == QmlDebug::Enabled)
+        setActiveEngineClient(engineClient3);
 
     DeclarativeToolsClient *toolsClient1 = new DeclarativeToolsClient(connection);
     connect(toolsClient1, SIGNAL(newStatus(QmlDebug::ClientStatus)),
diff --git a/src/plugins/debugger/qml/qmlinspectoragent.cpp b/src/plugins/debugger/qml/qmlinspectoragent.cpp
index c6fe7cb375e68429193f1a9a0c4f75d7d2fb61a9..314aae360f384dce06308b82d442fdc63e219510 100644
--- a/src/plugins/debugger/qml/qmlinspectoragent.cpp
+++ b/src/plugins/debugger/qml/qmlinspectoragent.cpp
@@ -42,6 +42,7 @@
 #include <QElapsedTimer>
 
 using namespace QmlDebug;
+using namespace QmlDebug::Constants;
 
 namespace Debugger {
 namespace Internal {
@@ -97,6 +98,17 @@ void QmlInspectorAgent::assignValue(const WatchData *data,
     }
 }
 
+int parentIdForIname(const QByteArray &iname)
+{
+    // Extract the parent id
+    int lastIndex = iname.lastIndexOf('.');
+    int secondLastIndex = iname.lastIndexOf('.', lastIndex - 1);
+    int parentId = -1;
+    if (secondLastIndex != -1)
+        parentId = iname.mid(secondLastIndex + 1, lastIndex - secondLastIndex - 1).toInt();
+    return parentId;
+}
+
 void QmlInspectorAgent::updateWatchData(const WatchData &data)
 {
     if (debug)
@@ -104,6 +116,15 @@ void QmlInspectorAgent::updateWatchData(const WatchData &data)
 
     if (data.id && !m_fetchDataIds.contains(data.id)) {
         // objects
+        using namespace QmlDebug::Constants;
+        if (m_engineClient->objectName() == QLatin1String(QDECLARATIVE_ENGINE)) {
+            int parentId = parentIdForIname(data.iname);
+            if (parentId != -1) {
+                QList<int> childIds = m_debugIdChildIds.value(parentId);
+                childIds << data.id;
+                m_debugIdChildIds.insert(parentId, childIds);
+            }
+        }
         m_fetchDataIds << data.id;
         fetchObject(data.id);
     }
@@ -424,7 +445,7 @@ void QmlInspectorAgent::onResult(quint32 queryId, const QVariant &value,
     } else if (type == "SET_BINDING_R"
                || type == "RESET_BINDING_R"
                || type == "SET_METHOD_BODY_R") {
-        QString msg = QLatin1String(type) + tr(" success : ");
+        QString msg = QLatin1String(type) + tr("Success: ");
         msg += value.toBool() ? QLatin1Char('1') : QLatin1Char('0');
         if (!value.toBool())
             emit automaticUpdateFailed();
@@ -440,10 +461,10 @@ void QmlInspectorAgent::onResult(quint32 queryId, const QVariant &value,
             foreach (QVariant var, objList) {
                 // TODO: check which among the list is the actual
                 // object that needs to be selected.
-                objectTreeFetched(qvariant_cast<ObjectReference>(var));
+                insertObjectInTree(qvariant_cast<ObjectReference>(var));
             }
         } else {
-            objectTreeFetched(qvariant_cast<ObjectReference>(value));
+            insertObjectInTree(qvariant_cast<ObjectReference>(value));
         }
     } else if (queryId == m_engineQueryId) {
         m_engineQueryId = 0;
@@ -455,7 +476,7 @@ void QmlInspectorAgent::onResult(quint32 queryId, const QVariant &value,
     } else if (queryId == m_rootContextQueryId) {
         m_rootContextQueryId = 0;
         clearObjectTree();
-        fetchObjectsInContextRecursive(qvariant_cast<ContextReference>(value));
+        updateObjectTree(qvariant_cast<ContextReference>(value));
     } else {
         emit expressionResult(queryId, value);
     }
@@ -476,7 +497,7 @@ void QmlInspectorAgent::newObject(int engineId, int objectId, int /*parentId*/)
         return;
 
     m_newObjectsCreated = true;
-    if (m_engineClient->objectName() == QLatin1String(QmlDebug::Constants::QML_DEBUGGER))
+    if (m_engineClient->objectName() != QLatin1String(QDECLARATIVE_ENGINE))
         fetchObject(objectId);
     else
         m_delayQueryTimer.start();
@@ -583,8 +604,7 @@ void QmlInspectorAgent::fetchContextObjectsForLocation(const QString &file,
     m_objectTreeQueryIds << queryId;
 }
 
-// fetch the root objects from the context + any child contexts
-void QmlInspectorAgent::fetchObjectsInContextRecursive(const ContextReference &context)
+void QmlInspectorAgent::updateObjectTree(const ContextReference &context)
 {
     if (debug)
         qDebug() << __FUNCTION__ << '(' << context << ')';
@@ -593,22 +613,14 @@ void QmlInspectorAgent::fetchObjectsInContextRecursive(const ContextReference &c
             || !debuggerCore()->boolSetting(ShowQmlObjectTree))
         return;
 
-    foreach (const ObjectReference & obj, context.objects()) {
-        using namespace QmlDebug::Constants;
-        if (m_engineClient->objectName() == QLatin1String(QML_DEBUGGER) &&
-                m_engineClient->serviceVersion() >= CURRENT_SUPPORTED_VERSION) {
-            //Fetch only root objects
-            if (obj.parentId() == -1)
-                fetchObject(obj.debugId());
-        } else {
-            m_objectTreeQueryIds << m_engineClient->queryObjectRecursive(obj.debugId());
-        }
-    }
+    foreach (const ObjectReference & obj, context.objects())
+        insertObjectInTree(obj);
+
     foreach (const ContextReference &child, context.contexts())
-        fetchObjectsInContextRecursive(child);
+        updateObjectTree(child);
 }
 
-void QmlInspectorAgent::objectTreeFetched(const ObjectReference &object)
+void QmlInspectorAgent::insertObjectInTree(const ObjectReference &object)
 {
     if (debug)
         qDebug() << __FUNCTION__ << '(' << object << ')';
@@ -628,8 +640,8 @@ void QmlInspectorAgent::objectTreeFetched(const ObjectReference &object)
     ObjectReference last;
     QStack<QmlDebug::ObjectReference> stack;
 
-    // 4.x
-    if (m_newObjectsCreated && m_engineClient->objectName() != QLatin1String(QmlDebug::Constants::QML_DEBUGGER)) {
+    // qt <= 4.8.3
+    if (m_newObjectsCreated && m_engineClient->objectName() == QLatin1String(QDECLARATIVE_ENGINE)) {
         // We need to reverse the stack as the root objects
         // are pushed to the bottom since they are fetched first.
         // The child objects need to placed in the correct position and therefore
@@ -645,8 +657,8 @@ void QmlInspectorAgent::objectTreeFetched(const ObjectReference &object)
         int parentId = last.parentId();
         QByteArray parentIname;
 
-        // 4.x
-        if (m_engineClient->objectName() != QLatin1String(QmlDebug::Constants::QML_DEBUGGER)) {
+        // qt <= 4.8.3
+        if (m_engineClient->objectName() == QLatin1String(QDECLARATIVE_ENGINE)) {
             QHashIterator<int, QList<int> > i(m_debugIdChildIds);
             while (i.hasNext()) {
                 i.next();
@@ -662,8 +674,8 @@ void QmlInspectorAgent::objectTreeFetched(const ObjectReference &object)
             fetchObject(parentId);
             return;
         }
-        // 5.x
-        if (m_engineClient->objectName() == QLatin1String(QmlDebug::Constants::QML_DEBUGGER)
+        // qt > 4.8.3
+        if (m_engineClient->objectName() != QLatin1String(QDECLARATIVE_ENGINE)
                 && m_newObjectsCreated && parentIname.isEmpty()) {
             if (watchData.count())
                 break;
@@ -735,13 +747,14 @@ void QmlInspectorAgent::buildDebugIdHashRecursive(const ObjectReference &ref)
         m_debugIdHash[file][location].append(ref.debugId());
     m_debugIdLocations.insert(ref.debugId(), FileReference(filePath, lineNum, colNum));
 
-    // 4.x
-    if (m_newObjectsCreated && m_engineClient->objectName() != QLatin1String(QmlDebug::Constants::QML_DEBUGGER)) {
-        QList<int> childIds;
+    // qt <= 4.8.3
+    if (m_newObjectsCreated
+            && m_engineClient->objectName() == QLatin1String(QDECLARATIVE_ENGINE)) {
+        QList<int> childIds = m_debugIdChildIds.value(ref.debugId());
         foreach (const ObjectReference &c, ref.children()) {
             childIds << c.debugId();
         }
-        // For 4.x, we do not get the parentId. Hence, store the child ids
+        // For qt <= 4.8.3, we do not get the parentId. Hence, store the child ids
         // to look up correct insertion places later
         m_debugIdChildIds.insert(ref.debugId(), childIds);
     }
@@ -814,7 +827,7 @@ QList<WatchData> QmlInspectorAgent::buildWatchData(const ObjectReference &obj,
         WatchData propertiesWatch;
         propertiesWatch.id = objDebugId;
         propertiesWatch.exp = "";
-        propertiesWatch.name = tr("properties");
+        propertiesWatch.name = tr("Properties");
         propertiesWatch.iname = objIname + ".[properties]";
         propertiesWatch.type = "";
         propertiesWatch.value = _("list");
@@ -867,18 +880,18 @@ bool QmlInspectorAgent::isConnected() const
 void QmlInspectorAgent::clearObjectTree()
 {
     // clear view
-    m_debuggerEngine->watchHandler()->removeChildren("inspect");
+    m_debuggerEngine->watchHandler()->cleanup();
 
     m_objectTreeQueryIds.clear();
-
+    m_fetchDataIds.clear();
     int old_count = m_debugIdHash.count();
     m_debugIdHash.clear();
     m_debugIdHash.reserve(old_count + 1);
     m_debugIdToIname.clear();
     m_debugIdChildIds.clear();
     m_objectStack.clear();
-    // reset only for 5.x.
-    if (m_engineClient->objectName() == QLatin1String(QmlDebug::Constants::QML_DEBUGGER))
+    // reset only for qt > 4.8.3.
+    if (m_engineClient->objectName() != QLatin1String(QDECLARATIVE_ENGINE))
         m_newObjectsCreated = false;
 
     removeAllObjectWatches();
diff --git a/src/plugins/debugger/qml/qmlinspectoragent.h b/src/plugins/debugger/qml/qmlinspectoragent.h
index 2d4ad81aefbd0f5cf45028b0daee9c810b15ae98..a289483e7976738bef9c5273644cc37184f23d54 100644
--- a/src/plugins/debugger/qml/qmlinspectoragent.h
+++ b/src/plugins/debugger/qml/qmlinspectoragent.h
@@ -110,9 +110,9 @@ private slots:
     void onValueChanged(int debugId, const QByteArray &propertyName, const QVariant &value);
 
 private:
-    void fetchObjectsInContextRecursive(const QmlDebug::ContextReference &context);
+    void updateObjectTree(const QmlDebug::ContextReference &context);
 
-    void objectTreeFetched(const QmlDebug::ObjectReference &result);
+    void insertObjectInTree(const QmlDebug::ObjectReference &result);
 
     void buildDebugIdHashRecursive(const QmlDebug::ObjectReference &ref);
     QList<WatchData> buildWatchData(const QmlDebug::ObjectReference &obj,
diff --git a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
index 1106cb78c982a51f339a2b080d29e05864d86dba..fcf5b224b16320fcc307562a9450646e22de4aae 100644
--- a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
+++ b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
@@ -978,8 +978,6 @@ QmlV8DebuggerClient::~QmlV8DebuggerClient()
 
 void QmlV8DebuggerClient::startSession()
 {
-    //Supports v2.0 and above
-    QTC_ASSERT(serviceVersion() >= CURRENT_SUPPORTED_VERSION, return);
     flushSendBuffer();
     d->connect();
     //Query for the V8 version. This is
@@ -1635,7 +1633,7 @@ StackFrame QmlV8DebuggerClient::extractStackFrame(const QVariant &bodyVal, const
     QmlV8ObjectData objectData = d->extractData(body.value(_("func")), refsVal);
     QString functionName = objectData.value.toString();
     if (functionName.isEmpty())
-        functionName = tr("anonymous function");
+        functionName = tr("Anonymous Function");
     stackFrame.function = functionName;
 
     objectData = d->extractData(body.value(_("script")), refsVal);
diff --git a/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h b/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h
index 19935617c22370f9082fd97229579429e7ce7e7e..2f7c8f0ba47899061874a0c20e44aaec319f65de 100644
--- a/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h
+++ b/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h
@@ -34,7 +34,6 @@
 namespace Debugger {
 namespace Internal {
 
-const float CURRENT_SUPPORTED_VERSION = 2.0;
 const char V8REQUEST[] = "v8request";
 const char V8MESSAGE[] = "v8message";
 const char BREAKONSIGNAL[] = "breakonsignal";
diff --git a/src/plugins/debugger/sourcefileshandler.cpp b/src/plugins/debugger/sourcefileshandler.cpp
index 50fb3289dde6fb38857b7aa0ca7493b2d512474d..cc75808f0fe543d6133eb8838de05d340fd827af 100644
--- a/src/plugins/debugger/sourcefileshandler.cpp
+++ b/src/plugins/debugger/sourcefileshandler.cpp
@@ -60,8 +60,8 @@ QVariant SourceFilesHandler::headerData(int section,
 {
     if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
         static QString headers[] = {
-            tr("Internal name") + QLatin1String("        "),
-            tr("Full name") + QLatin1String("        "),
+            tr("Internal Name") + QLatin1String("        "),
+            tr("Full Name") + QLatin1String("        "),
         };
         return headers[section];
     }
diff --git a/src/plugins/debugger/stackwindow.cpp b/src/plugins/debugger/stackwindow.cpp
index 2d6958f4dd6ade4f4162fb3ff2d4eaa249d19da6..3a2962ddf4be5281afc25e5592cc28b04d7050fb 100644
--- a/src/plugins/debugger/stackwindow.cpp
+++ b/src/plugins/debugger/stackwindow.cpp
@@ -225,9 +225,7 @@ void StackTreeView::copyContentsToClipboard()
         str += QLatin1Char('\n');
     }
     QClipboard *clipboard = QApplication::clipboard();
-#    ifdef Q_WS_X11
     clipboard->setText(str, QClipboard::Selection);
-#    endif
     clipboard->setText(str, QClipboard::Clipboard);
 }
 
diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp
index 96d9fc3ecec2d1d3ac4b90505c4fd6bad85c85bb..45cb435b60ba40443bdc07c34bc1b9aca720a562 100644
--- a/src/plugins/debugger/watchwindow.cpp
+++ b/src/plugins/debugger/watchwindow.cpp
@@ -600,9 +600,7 @@ static QString removeWatchActionText(QString exp)
 static void copyToClipboard(const QString &clipboardText)
 {
     QClipboard *clipboard = QApplication::clipboard();
-#ifdef Q_WS_X11
     clipboard->setText(clipboardText, QClipboard::Selection);
-#endif
     clipboard->setText(clipboardText, QClipboard::Clipboard);
 }
 
diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp
index c9fa258eb23369215da94e680abb9cc87f472735..e935869d76c41895cd52b78c3808ac269c24f6b2 100644
--- a/src/plugins/git/gerrit/gerritplugin.cpp
+++ b/src/plugins/git/gerrit/gerritplugin.cpp
@@ -387,7 +387,7 @@ QString GerritPlugin::gitBinary()
     bool ok;
     const QString git = Git::Internal::GitPlugin::instance()->gitClient()->gitBinaryPath(&ok);
     if (!ok) {
-        VcsBase::VcsBaseOutputWindow::instance()->appendError(tr("git is not available."));
+        VcsBase::VcsBaseOutputWindow::instance()->appendError(tr("Git is not available."));
         return QString();
     }
     return git;
diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
index 1d26187b7cc2f78ed20a04df4945574dc0961b18..30d67bd30b5f4dc620fd804a8b42c471c2882f24 100644
--- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
@@ -102,7 +102,6 @@ DeviceSettingsWidget::DeviceSettingsWidget(QWidget *parent)
       m_deviceManager(DeviceManager::cloneInstance()),
       m_deviceManagerModel(new DeviceManagerModel(m_deviceManager, this)),
       m_nameValidator(new NameValidator(m_deviceManager, this)),
-      m_saveSettingsRequested(false),
       m_additionalActionsMapper(new QSignalMapper(this)),
       m_configWidget(0)
 {
@@ -115,11 +114,6 @@ DeviceSettingsWidget::DeviceSettingsWidget(QWidget *parent)
 
 DeviceSettingsWidget::~DeviceSettingsWidget()
 {
-    if (m_saveSettingsRequested) {
-        Core::ICore::settings()->setValue(QLatin1String(LastDeviceIndexKey),
-            currentIndex());
-        DeviceManager::replaceInstance();
-    }
     DeviceManager::removeClonedInstance();
     delete m_configWidget;
     delete m_ui;
@@ -237,10 +231,17 @@ void DeviceSettingsWidget::fillInValues()
     m_ui->nameLineEdit->setText(current->displayName());
 }
 
+void DeviceSettingsWidget::updateDeviceFromUi()
+{
+    deviceNameEditingFinished();
+    if (m_configWidget)
+        m_configWidget->updateDeviceFromUi();
+}
+
 void DeviceSettingsWidget::saveSettings()
 {
-    // We must defer this step because of a stupid bug on MacOS. See QTCREATORBUG-1675.
-    m_saveSettingsRequested = true;
+    Core::ICore::settings()->setValue(QLatin1String(LastDeviceIndexKey), currentIndex());
+    DeviceManager::replaceInstance();
 }
 
 int DeviceSettingsWidget::currentIndex() const
@@ -329,12 +330,14 @@ void DeviceSettingsWidget::handleAdditionalActionRequest(int actionId)
 {
     const IDevice::ConstPtr device = m_deviceManager->find(currentDevice()->id());
     QTC_ASSERT(device, return);
+    updateDeviceFromUi();
     device->executeAction(Core::Id::fromUniqueIdentifier(actionId), this);
 }
 
 void DeviceSettingsWidget::handleProcessListRequested()
 {
     QTC_ASSERT(currentDevice()->canCreateProcessModel(), return);
+    updateDeviceFromUi();
     DeviceProcessesDialog dlg;
     dlg.addCloseButton();
     dlg.setDevice(currentDevice());
diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h
index 177315a959fc77cade86fb46ca25ab758dea4ca6..64a8491e3df42e0218226637f3364992b16191ee 100644
--- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h
+++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h
@@ -81,12 +81,12 @@ private:
     void clearDetails();
     QString parseTestOutput();
     void fillInValues();
+    void updateDeviceFromUi();
 
     Ui::DeviceSettingsWidget *m_ui;
     DeviceManager * const m_deviceManager;
     DeviceManagerModel * const m_deviceManagerModel;
     NameValidator * const m_nameValidator;
-    bool m_saveSettingsRequested;
     QList<QPushButton *> m_additionalActionButtons;
     QSignalMapper * const m_additionalActionsMapper;
     IDeviceWidget *m_configWidget;
diff --git a/src/plugins/projectexplorer/devicesupport/idevicewidget.h b/src/plugins/projectexplorer/devicesupport/idevicewidget.h
index 0b7ccf363c050bc063e82621376679c5d3a0c1cc..5b212efa7cac744d9cc62603c0cbf7fb5f46dded 100644
--- a/src/plugins/projectexplorer/devicesupport/idevicewidget.h
+++ b/src/plugins/projectexplorer/devicesupport/idevicewidget.h
@@ -50,6 +50,18 @@ namespace ProjectExplorer {
 class PROJECTEXPLORER_EXPORT IDeviceWidget : public QWidget
 {
     Q_OBJECT
+public:
+
+    /*!
+     * \brief Ensures that all changes in the UI are propagated to the device object.
+     *
+     * If the device is always updated right when the change happens, the implementation of
+     * this function can be empty. Note, however, that you cannot generally rely on the
+     * QLineEdit::editingFinished() signal being emitted on time if some button in the dialog is
+     * clicked (e.g. "Apply"). So if you have any handlers for line edit changes, they should
+     * probably be called here.
+     */
+    virtual void updateDeviceFromUi() = 0;
 
 protected:
     IDeviceWidget(const IDevice::Ptr &device, QWidget *parent = 0)
diff --git a/src/plugins/projectexplorer/kitinformation.h b/src/plugins/projectexplorer/kitinformation.h
index ce6a6749dd756f23132cffddca2c44b35196a8f9..84127020d69afe58165d4b74d0d747e592ca7b76 100644
--- a/src/plugins/projectexplorer/kitinformation.h
+++ b/src/plugins/projectexplorer/kitinformation.h
@@ -78,9 +78,9 @@ public:
     SysRootMatcher(const Utils::FileName &fn) : m_sysroot(fn)
     { }
 
-    bool matches(const Kit *p) const
+    bool matches(const Kit *k) const
     {
-        return SysRootKitInformation::sysRoot(p) == m_sysroot;
+        return SysRootKitInformation::sysRoot(k) == m_sysroot;
     }
 
 private:
@@ -125,9 +125,9 @@ public:
     ToolChainMatcher(const ToolChain *tc) : m_tc(tc)
     { }
 
-    bool matches(const Kit *p) const
+    bool matches(const Kit *k) const
     {
-        return ToolChainKitInformation::toolChain(p) == m_tc;
+        return ToolChainKitInformation::toolChain(k) == m_tc;
     }
 
 private:
@@ -166,9 +166,9 @@ public:
     DeviceTypeMatcher(const Core::Id t) : m_type(t)
     { }
 
-    bool matches(const Kit *p) const
+    bool matches(const Kit *k) const
     {
-        Core::Id deviceType = DeviceTypeKitInformation::deviceTypeId(p);
+        Core::Id deviceType = DeviceTypeKitInformation::deviceTypeId(k);
         if (!deviceType.isValid())
             return false;
         return deviceType == m_type;
@@ -214,9 +214,9 @@ public:
     DeviceMatcher(Core::Id id) : m_devId(id)
     { }
 
-    bool matches(const Kit *p) const
+    bool matches(const Kit *k) const
     {
-        return DeviceKitInformation::deviceId(p) == m_devId;
+        return DeviceKitInformation::deviceId(k) == m_devId;
     }
 
 private:
diff --git a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
index da8903581fd4be768edb45ff6d50d38f17c70b83..7fdfb5cf671a663d5cfbef8135815714c3cdcce2 100644
--- a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
+++ b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
@@ -165,7 +165,7 @@ bool ToolChainInformationConfigWidget::isDirty() const
 {
     ToolChain *tc = ToolChainKitInformation::toolChain(m_kit);
     return (m_comboBox->itemData(m_comboBox->currentIndex()).toString())
-            == (tc ? tc->id() : QString());
+            != (tc ? tc->id() : QString());
 }
 
 void ToolChainInformationConfigWidget::makeReadOnly()
@@ -308,6 +308,9 @@ DeviceInformationConfigWidget::DeviceInformationConfigWidget(Kit *k, QWidget *pa
     m_comboBox(new QComboBox), m_manageButton(new QPushButton(this)),
     m_model(new DeviceManagerModel(DeviceManager::instance()))
 {
+    connect(m_model, SIGNAL(modelAboutToBeReset()), SLOT(modelAboutToReset()));
+    connect(m_model, SIGNAL(modelReset()), SLOT(modelReset()));
+
     setToolTip(tr("The device to run the applications on."));
 
     QHBoxLayout *layout = new QHBoxLayout(this);
@@ -368,5 +371,15 @@ void DeviceInformationConfigWidget::manageDevices()
                                    QLatin1String(ProjectExplorer::Constants::DEVICE_SETTINGS_PAGE_ID));
 }
 
+void DeviceInformationConfigWidget::modelAboutToReset()
+{
+    m_selectedId = m_model->deviceId(m_comboBox->currentIndex());
+}
+
+void DeviceInformationConfigWidget::modelReset()
+{
+    m_comboBox->setCurrentIndex(m_model->indexForId(m_selectedId));
+}
+
 } // namespace Internal
 } // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/kitinformationconfigwidget.h b/src/plugins/projectexplorer/kitinformationconfigwidget.h
index f338b9be4cc68fe0a29f1b6d2aec7ebfe6576770..632ce87ba59fc10dfe69f4f483f09ac63dc0de7d 100644
--- a/src/plugins/projectexplorer/kitinformationconfigwidget.h
+++ b/src/plugins/projectexplorer/kitinformationconfigwidget.h
@@ -33,6 +33,8 @@
 
 #include "kitconfigwidget.h"
 
+#include <coreplugin/id.h>
+
 QT_BEGIN_NAMESPACE
 class QComboBox;
 class QPushButton;
@@ -148,6 +150,8 @@ public:
 
 private slots:
     void manageDevices();
+    void modelAboutToReset();
+    void modelReset();
 
 private:
     bool m_isReadOnly;
@@ -155,6 +159,7 @@ private:
     QComboBox *m_comboBox;
     QPushButton *m_manageButton;
     DeviceManagerModel *m_model;
+    Core::Id m_selectedId;
 };
 
 } // namespace Internal
diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp
index e90cd6dfe8654e9ba6e2faf2ec415d31aa8c77db..b5093acc26f7b5007404a8487936a510a65c2df2 100644
--- a/src/plugins/projectexplorer/kitmanager.cpp
+++ b/src/plugins/projectexplorer/kitmanager.cpp
@@ -284,14 +284,18 @@ KitManager::KitList KitManager::restoreKits(const Utils::FileName &fileName)
     KitList result;
 
     PersistentSettingsReader reader;
-    if (!reader.load(fileName))
+    if (!reader.load(fileName)) {
+        qWarning("Warning: Failed to read \"%s\", can not restore kits!", qPrintable(fileName.toUserOutput()));
         return result;
+    }
     QVariantMap data = reader.restoreValues();
 
     // Check version:
     int version = data.value(QLatin1String(KIT_FILE_VERSION_KEY), 0).toInt();
-    if (version < 1)
+    if (version < 1) {
+        qWarning("Warning: Kit file version %d not supported, can not restore kits!", version);
         return result;
+    }
 
     const int count = data.value(QLatin1String(KIT_COUNT_KEY), 0).toInt();
     for (int i = 0; i < count; ++i) {
diff --git a/src/plugins/projectexplorer/kitmodel.cpp b/src/plugins/projectexplorer/kitmodel.cpp
index 9e79e4b2ef1b6f0b7b2da2d9c13ba9be9c483a6a..cbfc99969581f111310b7af0428501761632a309 100644
--- a/src/plugins/projectexplorer/kitmodel.cpp
+++ b/src/plugins/projectexplorer/kitmodel.cpp
@@ -266,7 +266,7 @@ void KitModel::setDirty()
     KitConfigWidget *w = qobject_cast<KitConfigWidget *>(sender());
     foreach (KitNode *n, m_manualRoot->childNodes) {
         if (n->widget == w) {
-            n->changed = true;
+            n->changed = n->widget->isDirty();
             emit dataChanged(index(n, 0), index(n, columnCount(QModelIndex())));
         }
     }
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 0f23a403d34835c6be3bb972bef69613548e194b..b00c48ba2f80f3876e5160081f9ebcf5359cd536 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -266,7 +266,7 @@ Target *Project::restoreTarget(const QVariantMap &data)
 
     Kit *k = KitManager::instance()->find(id);
     if (!k) {
-        qWarning("Warning: No profile '%s' found. Continuing.", qPrintable(id.toString()));
+        qWarning("Warning: No kit '%s' found. Continuing.", qPrintable(id.toString()));
         return 0;
     }
 
diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp
index 92e2e7bdccf68551ffce5b8c560fac6dcd6afdbd..5c3d702b59157e82db21418eb3fdc46c47df3363 100644
--- a/src/plugins/projectexplorer/target.cpp
+++ b/src/plugins/projectexplorer/target.cpp
@@ -188,6 +188,7 @@ void Target::handleKitUpdates(Kit *k)
     setDisplayName(k->displayName());
     setIcon(k->icon());
     updateDefaultDeployConfigurations();
+    updateDeviceState(); // in case the device changed...
     emit kitChanged();
 }
 
diff --git a/src/plugins/projectexplorer/target.h b/src/plugins/projectexplorer/target.h
index 4fb87066a6d1d24f0ea4f42fa0cbe87f0d9b2e06..f35c5d1d1e1e4409388eae1f90568b69a9009646 100644
--- a/src/plugins/projectexplorer/target.h
+++ b/src/plugins/projectexplorer/target.h
@@ -59,7 +59,7 @@ class PROJECTEXPLORER_EXPORT Target : public ProjectConfiguration
     Q_OBJECT
 
 public:
-    Target(Project *parent, Kit *p);
+    Target(Project *parent, Kit *k);
     ~Target();
 
     Project *project() const;
diff --git a/src/plugins/qmlprofiler/qmlprofilereventview.cpp b/src/plugins/qmlprofiler/qmlprofilereventview.cpp
index 5147bcea0809906887d6a54e84988f56ea685593..33d0d14c9797e827039a7b2df865e795b8eadae6 100644
--- a/src/plugins/qmlprofiler/qmlprofilereventview.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilereventview.cpp
@@ -184,7 +184,7 @@ void QmlProfilerEventsWidget::switchToV8View()
     d->m_eventTree->setViewType(QmlProfilerEventsMainView::V8ProfileView);
     d->m_eventParents->setViewType(QmlProfilerEventsParentsAndChildrenView::V8ParentsView);
     d->m_eventChildren->setViewType(QmlProfilerEventsParentsAndChildrenView::V8ChildrenView);
-    setToolTip(tr("Trace information from the v8 JavaScript engine. Available only in Qt5 based applications"));
+    setToolTip(tr("Trace information from the v8 JavaScript engine. Available only in Qt5 based applications."));
 }
 
 void QmlProfilerEventsWidget::clear()
@@ -614,7 +614,7 @@ void QmlProfilerEventsMainView::QmlProfilerEventsMainViewPrivate::buildModelFrom
                     typeString = typeString + tr(" (Opt)");
                     toolTipText = tr("Binding is evaluated by the optimized engine.");
                 } else if (binding->bindingType == (int)V8Binding) {
-                    toolTipText = tr("Binding not optimized (eg. has side effects or assignments,\n"
+                    toolTipText = tr("Binding not optimized (e.g. has side effects or assignments,\n"
                                      "references to elements in other files, loops, etc.)");
 
                 }
@@ -681,7 +681,7 @@ void QmlProfilerEventsMainView::QmlProfilerEventsMainViewPrivate::buildModelFrom
             if (binding->isBindingLoop)
                 foreach (QStandardItem *item, newRow) {
                     item->setBackground(colors()->bindingLoopBackground);
-                    item->setToolTip(tr("Binding loop detected"));
+                    item->setToolTip(tr("Binding loop detected."));
                 }
 
             // append
@@ -921,9 +921,7 @@ void QmlProfilerEventsMainView::copyTableToClipboard() const
         str += d->textForItem(d->m_model->item(i));
     }
     QClipboard *clipboard = QApplication::clipboard();
-#    ifdef Q_WS_X11
     clipboard->setText(str, QClipboard::Selection);
-#    endif
     clipboard->setText(str, QClipboard::Clipboard);
 }
 
@@ -933,9 +931,7 @@ void QmlProfilerEventsMainView::copyRowToClipboard() const
     str = d->textForItem(d->m_model->itemFromIndex(selectedItem()), false);
 
     QClipboard *clipboard = QApplication::clipboard();
-#    ifdef Q_WS_X11
     clipboard->setText(str, QClipboard::Selection);
-#    endif
     clipboard->setText(str, QClipboard::Clipboard);
 }
 
@@ -1041,7 +1037,7 @@ void QmlProfilerEventsParentsAndChildrenView::rebuildTree(void *profilerDataMode
             if (event->inLoopPath)
                 foreach (QStandardItem *item, newRow) {
                     item->setBackground(colors()->bindingLoopBackground);
-                    item->setToolTip(tr("Part of binding loop"));
+                    item->setToolTip(tr("Part of binding loop."));
                 }
         } else {
             QV8EventSub *event = v8List->at(index);
diff --git a/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp b/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp
index c4d94d90237028dcdf54f203d630d69d1fee48c9..0cc62a6a69eede0e8abe5888accc24238a64dfbd 100644
--- a/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp
+++ b/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp
@@ -93,6 +93,14 @@ void BlackBerryDeviceConfigurationWidget::debugTokenEditingFinished()
     deviceConfiguration()->setDebugToken(ui->debugToken->path());
 }
 
+void BlackBerryDeviceConfigurationWidget::updateDeviceFromUi()
+{
+    hostNameEditingFinished();
+    passwordEditingFinished();
+    keyFileEditingFinished();
+    debugTokenEditingFinished();
+}
+
 void BlackBerryDeviceConfigurationWidget::initGui()
 {
     ui->debugToken->setExpectedKind(Utils::PathChooser::File);
diff --git a/src/plugins/qnx/blackberrydeviceconfigurationwidget.h b/src/plugins/qnx/blackberrydeviceconfigurationwidget.h
index 299ec4cc9c0b3c139b0fb227f21d351a36fd468a..fb8b207dcc36cb92af3e2139199565096e912761 100644
--- a/src/plugins/qnx/blackberrydeviceconfigurationwidget.h
+++ b/src/plugins/qnx/blackberrydeviceconfigurationwidget.h
@@ -62,6 +62,7 @@ private slots:
     void debugTokenEditingFinished();
 
 private:
+    void updateDeviceFromUi();
     void initGui();
 
     BlackBerryDeviceConfiguration::Ptr deviceConfiguration() const;
diff --git a/src/plugins/qt4projectmanager/qt4targetsetupwidget.cpp b/src/plugins/qt4projectmanager/qt4targetsetupwidget.cpp
index e5caae7e6403b356007773a65b43db02d88da6f8..fc61671b0ca129657241546ed99da3aff883fbb9 100644
--- a/src/plugins/qt4projectmanager/qt4targetsetupwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4targetsetupwidget.cpp
@@ -230,7 +230,8 @@ void Qt4TargetSetupWidget::manageKit()
 
     page->showKit(m_kit);
     Core::ICore::showOptionsDialog(QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY),
-                                   QLatin1String(ProjectExplorer::Constants::KITS_SETTINGS_PAGE_ID));
+                                   QLatin1String(ProjectExplorer::Constants::KITS_SETTINGS_PAGE_ID),
+                                   this);
 }
 
 void Qt4TargetSetupWidget::setProFilePath(const QString &proFilePath)
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
index fa822d067fb1701ff265f8672fdeb29ad5a128e4..d8d5abb3b9000c16b96bdef90b015d80bbad6d63 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
@@ -511,20 +511,25 @@ void TargetSetupPage::setupImports()
     if (!m_importSearch || m_proFilePath.isEmpty())
         return;
 
-    QString sourceDir = QFileInfo(m_proFilePath).absolutePath();
-    import(Utils::FileName::fromString(sourceDir), true);
+    QFileInfo pfi(m_proFilePath);
+    const QString prefix = pfi.baseName();
+    QStringList toImport;
+    toImport << pfi.absolutePath();
 
     QList<ProjectExplorer::Kit *> kitList = ProjectExplorer::KitManager::instance()->kits();
     foreach (ProjectExplorer::Kit *k, kitList) {
         QFileInfo fi(Qt4Project::shadowBuildDirectory(m_proFilePath, k, QString()));
         const QString baseDir = fi.absolutePath();
-        const QString prefix = fi.baseName();
 
         foreach (const QString &dir, QDir(baseDir).entryList()) {
-            if (dir.startsWith(prefix))
-                import(Utils::FileName::fromString(baseDir + QLatin1Char('/') + dir), true);
+            const QString path = baseDir + QLatin1Char('/') + dir;
+            if (dir.startsWith(prefix) && !toImport.contains(path))
+                toImport << path;
+
         }
     }
+    foreach (const QString &path, toImport)
+        import(Utils::FileName::fromString(path), true);
 }
 
 void TargetSetupPage::handleKitAddition(ProjectExplorer::Kit *k)
@@ -609,7 +614,8 @@ void TargetSetupPage::updateVisibility()
 void TargetSetupPage::openOptions()
 {
     Core::ICore::instance()->showOptionsDialog(QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY),
-                                               QLatin1String(ProjectExplorer::Constants::KITS_SETTINGS_PAGE_ID));
+                                               QLatin1String(ProjectExplorer::Constants::KITS_SETTINGS_PAGE_ID),
+                                               this);
 }
 
 void TargetSetupPage::removeWidget(ProjectExplorer::Kit *k)
diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp
index 9dfec0343da745696b44df576ad2c3970bdc9814..e533246d0f4e00dba65598b3ecb777d47b9c8139 100644
--- a/src/plugins/qtsupport/qtoptionspage.cpp
+++ b/src/plugins/qtsupport/qtoptionspage.cpp
@@ -635,7 +635,7 @@ void QtOptionsPageWidget::addQtDir()
 {
     Utils::FileName qtVersion = Utils::FileName::fromString(
                 QFileInfo(QFileDialog::getOpenFileName(this,
-                                                       tr("Select a qmake executable"),
+                                                       tr("Select a qmake Executable"),
                                                        QString(),
                                                        filterForQmakeFileDialog(),
                                                        0,
@@ -645,7 +645,7 @@ void QtOptionsPageWidget::addQtDir()
     BaseQtVersion *version = QtVersionManager::instance()->qtVersionForQMakeBinary(qtVersion);
     if (version) {
         // Already exist
-        QMessageBox::warning(this, tr("Qt known"),
+        QMessageBox::warning(this, tr("Qt Version Already Registered"),
                              tr("This Qt version was already registered as \"%1\".")
                              .arg(version->displayName()));
         return;
diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp
index b2d87407c2bcb4b6f944144bb725d9a4c6d44928..343c19a8d430bf38a76f6bf369b89687b649780c 100644
--- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp
+++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp
@@ -151,6 +151,17 @@ void GenericLinuxDeviceConfigurationWidget::createNewKey()
         setPrivateKey(dialog.privateKeyFilePath());
 }
 
+void GenericLinuxDeviceConfigurationWidget::updateDeviceFromUi()
+{
+    hostNameEditingFinished();
+    sshPortEditingFinished();
+    timeoutEditingFinished();
+    userNameEditingFinished();
+    passwordEditingFinished();
+    keyFileEditingFinished();
+    handleFreePortsChanged();
+}
+
 void GenericLinuxDeviceConfigurationWidget::updatePortsWarningLabel()
 {
     m_ui->portsWarningLabel->setVisible(!device()->freePorts().hasMore());
diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h
index 0b996fb1e92ec14583339f6af00cfa4a81eeb13f..3a0d2f12296254dd85eba4c6de0dbafde5275686 100644
--- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h
+++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h
@@ -64,6 +64,7 @@ private slots:
     void createNewKey();
 
 private:
+    void updateDeviceFromUi();
     void updatePortsWarningLabel();
     void initGui();
 
diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp
index fce4f33299b0cde9c8131d861c95067850f9b1d6..b97399d7b81b461f607af09eb4316391c855b0d4 100644
--- a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp
+++ b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp
@@ -252,6 +252,7 @@ public:
     QPointer<GenericProposalInfoFrame> m_infoFrame;
     QTimer m_infoTimer;
     CodeAssistant *m_assistant;
+    bool m_autoWidth;
 
 public slots:
     void handleActivation(const QModelIndex &modelIndex);
@@ -266,6 +267,7 @@ GenericProposalWidgetPrivate::GenericProposalWidgetPrivate(QWidget *completionWi
     , m_explicitlySelected(false)
     , m_justInvoked(false)
     , m_assistant(0)
+    , m_autoWidth(true)
 {
     connect(m_completionListView, SIGNAL(activated(QModelIndex)),
             this, SLOT(handleActivation(QModelIndex)));
@@ -330,6 +332,10 @@ GenericProposalWidget::GenericProposalWidget()
     d->m_completionListView->setMinimumSize(1, 1);
     connect(d->m_completionListView->verticalScrollBar(), SIGNAL(valueChanged(int)),
             this, SLOT(updatePositionAndSize()));
+    connect(d->m_completionListView->verticalScrollBar(), SIGNAL(sliderPressed()),
+            this, SLOT(turnOffAutoWidth()));
+    connect(d->m_completionListView->verticalScrollBar(), SIGNAL(sliderReleased()),
+            this, SLOT(turnOnAutoWidth()));
 
     QVBoxLayout *layout = new QVBoxLayout(this);
     layout->setMargin(0);
@@ -494,6 +500,9 @@ bool GenericProposalWidget::updateAndCheck(const QString &prefix)
 
 void GenericProposalWidget::updatePositionAndSize()
 {
+    if (!d->m_autoWidth)
+        return;
+
     const QSize &shint = d->m_completionListView->calculateSize();
     const int fw = frameWidth();
     const int width = shint.width() + fw * 2 + 30;
@@ -514,6 +523,17 @@ void GenericProposalWidget::updatePositionAndSize()
     setGeometry(pos.x(), pos.y(), width, height);
 }
 
+void GenericProposalWidget::turnOffAutoWidth()
+{
+    d->m_autoWidth = false;
+}
+
+void GenericProposalWidget::turnOnAutoWidth()
+{
+    d->m_autoWidth = true;
+    updatePositionAndSize();
+}
+
 bool GenericProposalWidget::eventFilter(QObject *o, QEvent *e)
 {
     if (e->type() == QEvent::FocusOut) {
diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.h b/src/plugins/texteditor/codeassist/genericproposalwidget.h
index 745f7d51bcecc9675791f1690cf8bb18c95373aa..77a1688ef3f55089b8e230c2b6eb42e19ca52ce0 100644
--- a/src/plugins/texteditor/codeassist/genericproposalwidget.h
+++ b/src/plugins/texteditor/codeassist/genericproposalwidget.h
@@ -65,6 +65,8 @@ private:
 
 private slots:
     void updatePositionAndSize();
+    void turnOffAutoWidth();
+    void turnOnAutoWidth();
 
 protected:
     virtual bool eventFilter(QObject *o, QEvent *e);
diff --git a/src/plugins/texteditor/findinopenfiles.cpp b/src/plugins/texteditor/findinopenfiles.cpp
index 2c7e942a7939049d305227e978ef0116bf57244c..979417f5d4fda075cbabbe51cfb74602b2dce3bb 100644
--- a/src/plugins/texteditor/findinopenfiles.cpp
+++ b/src/plugins/texteditor/findinopenfiles.cpp
@@ -89,7 +89,7 @@ QVariant FindInOpenFiles::additionalParameters() const
 
 QString FindInOpenFiles::label() const
 {
-    return tr("Open Documents:");
+    return tr("Open documents:");
 }
 
 QString FindInOpenFiles::toolTip() const
diff --git a/src/plugins/texteditor/fontsettings.cpp b/src/plugins/texteditor/fontsettings.cpp
index 219fab2a8beec93ef8a6ddd13cc1422d3e0c01ba..ada0f6fcaf7ea5a073317a5e72a6e9d75161a5ae 100644
--- a/src/plugins/texteditor/fontsettings.cpp
+++ b/src/plugins/texteditor/fontsettings.cpp
@@ -55,15 +55,13 @@ static const bool DEFAULT_ANTIALIAS = true;
 #ifdef Q_OS_MAC
     enum { DEFAULT_FONT_SIZE = 12 };
     static const char *DEFAULT_FONT_FAMILY = "Monaco";
-#else
-#ifdef Q_WS_X11
+#elif defined(Q_OS_UNIX)
     enum { DEFAULT_FONT_SIZE = 9 };
     static const char *DEFAULT_FONT_FAMILY = "Monospace";
 #else
     enum { DEFAULT_FONT_SIZE = 10 };
     static const char *DEFAULT_FONT_FAMILY = "Courier";
 #endif
-#endif
 } // anonymous namespace
 
 namespace TextEditor {
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index 445bf48ac1365ce2df7586055439cbb75f2731cc..4afb3cb95413470a4320d075382596823646187e 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -510,8 +510,8 @@ void UrlTextCursorHandler::fillContextMenu(QMenu *menu, EditorContentType type)
 {
     Q_UNUSED(type);
     menu->addSeparator();
-    menu->addAction(createOpenUrlAction(tr("Open URL in browser...")));
-    menu->addAction(createCopyUrlAction(tr("Copy URL location")));
+    menu->addAction(createOpenUrlAction(tr("Open URL in Browser...")));
+    menu->addAction(createCopyUrlAction(tr("Copy URL Location")));
 }
 
 QString UrlTextCursorHandler::currentContents() const
@@ -575,8 +575,8 @@ void EmailTextCursorHandler::fillContextMenu(QMenu *menu, EditorContentType type
 {
     Q_UNUSED(type);
     menu->addSeparator();
-    menu->addAction(createOpenUrlAction(tr("Send email to...")));
-    menu->addAction(createCopyUrlAction(tr("Copy email address")));
+    menu->addAction(createOpenUrlAction(tr("Send Email To...")));
+    menu->addAction(createCopyUrlAction(tr("Copy Email Address")));
 }
 
 void EmailTextCursorHandler::slotOpenUrl()
diff --git a/src/tools/sdktool/README.txt b/src/tools/sdktool/README.txt
index be6f2225ff3844e4eca4b21712e4cd1348c186c8..9e21e73cbbdca86430aec1c4d45eefee4a42d5f8 100644
--- a/src/tools/sdktool/README.txt
+++ b/src/tools/sdktool/README.txt
@@ -119,6 +119,7 @@ Add a Kit using the newly set up tool chain and Qt version:
 Tricky parts:
   - debuggerengine is the integer used in the enum Debugger::DebuggerEngineType
     The most important type is 1 for GDB.
+  - debugger can be a absolute path or the value: 'auto'
 
   - devicetype is the string returned IDevice::type()
 
diff --git a/src/tools/sdktool/addkeysoperation.cpp b/src/tools/sdktool/addkeysoperation.cpp
index 4cc898088a1580d970bea6dba371c145f3511792..f87dcacdccb3e64602ce0965ce56ee92129101e7 100644
--- a/src/tools/sdktool/addkeysoperation.cpp
+++ b/src/tools/sdktool/addkeysoperation.cpp
@@ -113,7 +113,7 @@ bool AddKeysOperation::test() const
     data.append(KeyValuePair(QLatin1String("newsub/1/2.1/3/qbytearray"), QString::fromLatin1("QByteArray:test array.")));
 
     QVariantMap result = addKeys(testMap, data);
-    if (!result.count() == 8)
+    if (result.count() != 8)
         return false;
 
     // subkeys:
diff --git a/src/tools/sdktool/addkitoperation.cpp b/src/tools/sdktool/addkitoperation.cpp
index ba5a05d46fe2982b2d681364db10543084a6352f..4fd5104efb76da2bb61be90dbaff41e576bf2b58 100644
--- a/src/tools/sdktool/addkitoperation.cpp
+++ b/src/tools/sdktool/addkitoperation.cpp
@@ -63,6 +63,12 @@ static char TOOLCHAIN[] = "PE.Profile.ToolChain";
 static char MKSPEC[] = "QtPM4.mkSpecInformation";
 static char QT[] = "QtSupport.QtInformation";
 
+AddKitOperation::AddKitOperation()
+    : m_debuggerEngine(0)
+    , m_debugger(QLatin1String("auto"))
+{
+}
+
 QString AddKitOperation::name() const
 {
     return QLatin1String("addKit");
@@ -216,7 +222,7 @@ bool AddKitOperation::test() const
 {
     QVariantMap map = initializeKits();
 
-    if (!map.count() == 3
+    if (map.count() != 3
             || !map.contains(QLatin1String(VERSION))
             || map.value(QLatin1String(VERSION)).toInt() != 1
             || !map.contains(QLatin1String(COUNT))
@@ -231,7 +237,7 @@ bool AddKitOperation::test() const
                  QLatin1String("{some-tc-id}"), QLatin1String("{some-qt-id}"), QLatin1String("unsupported/mkspec"),
                  KeyValuePairList() << KeyValuePair(QLatin1String("PE.Profile.Data/extraData"), QVariant(QLatin1String("extraValue"))));
 
-    if (!map.count() == 4
+    if (map.count() != 4
             || !map.contains(QLatin1String(VERSION))
             || map.value(QLatin1String(VERSION)).toInt() != 1
             || !map.contains(QLatin1String(COUNT))
@@ -242,7 +248,7 @@ bool AddKitOperation::test() const
         return false;
 
     QVariantMap profile0 = map.value(QLatin1String("Profile.0")).toMap();
-    if (!profile0.count() == 6
+    if (profile0.count() != 6
             || !profile0.contains(QLatin1String(ID))
             || profile0.value(QLatin1String(ID)).toString() != QLatin1String("testId")
             || !profile0.contains(QLatin1String(DISPLAYNAME))
@@ -266,7 +272,7 @@ bool AddKitOperation::test() const
                  QLatin1String("Desktop"), QString(),
                  QLatin1String("{some-tc-id2}"), QLatin1String("{some-qt-id2}"), QLatin1String("unsupported/mkspec2"),
                  KeyValuePairList() << KeyValuePair(QLatin1String("PE.Profile.Data/extraData"), QVariant(QLatin1String("extraValue2"))));
-    if (!map.count() == 5
+    if (map.count() != 5
             || !map.contains(QLatin1String(VERSION))
             || map.value(QLatin1String(VERSION)).toInt() != 1
             || !map.contains(QLatin1String(COUNT))
@@ -280,7 +286,7 @@ bool AddKitOperation::test() const
         return false;
 
     QVariantMap profile1 = map.value(QLatin1String("Profile.1")).toMap();
-    if (!profile1.count() == 6
+    if (profile1.count() != 6
             || !profile1.contains(QLatin1String(ID))
             || profile1.value(QLatin1String(ID)).toString() != QLatin1String("testId2")
             || !profile1.contains(QLatin1String(DISPLAYNAME))
diff --git a/src/tools/sdktool/addkitoperation.h b/src/tools/sdktool/addkitoperation.h
index e526bcb604463aa06e86f5b16d93b55c3e7addf3..e1910674b3260d51a3710b916b47727a9b2f92c9 100644
--- a/src/tools/sdktool/addkitoperation.h
+++ b/src/tools/sdktool/addkitoperation.h
@@ -38,6 +38,8 @@
 class AddKitOperation : public Operation
 {
 public:
+    AddKitOperation();
+
     QString name() const;
     QString helpText() const;
     QString argumentsHelpText() const;
diff --git a/src/tools/sdktool/addqtoperation.cpp b/src/tools/sdktool/addqtoperation.cpp
index 7ed44d77541a1e00a32a44fd036501b9f963222f..c643e2a6255322056c4d7225d019d90638ca9bc8 100644
--- a/src/tools/sdktool/addqtoperation.cpp
+++ b/src/tools/sdktool/addqtoperation.cpp
@@ -149,14 +149,14 @@ bool AddQtOperation::test() const
                 QLatin1String("/tmp/test/qmake"),
                 KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))));
 
-    if (!map.count() == 2
+    if (map.count() != 2
             || !map.contains(QLatin1String(VERSION))
             || map.value(QLatin1String(VERSION)).toInt() != 1
             || !map.contains(QLatin1String("QtVersion.0")))
         return false;
 
     QVariantMap version0 = map.value(QLatin1String("QtVersion.0")).toMap();
-    if (!version0.count() == 6
+    if (version0.count() != 6
             || !version0.contains(QLatin1String(ID))
             || version0.value(QLatin1String(ID)).toInt() != -1
             || !version0.contains(QLatin1String(DISPLAYNAME))
@@ -184,7 +184,7 @@ bool AddQtOperation::test() const
     map = addQt(map, QLatin1String("testId2"), QLatin1String("Test Qt Version"), QLatin1String("testType3"),
                    QLatin1String("/tmp/test/qmake2"),
                    KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))));
-    if (!map.count() == 3
+    if (map.count() != 3
             || !map.contains(QLatin1String(VERSION))
             || map.value(QLatin1String(VERSION)).toInt() != 1
             || !map.contains(QLatin1String("QtVersion.0"))
@@ -195,7 +195,7 @@ bool AddQtOperation::test() const
         return false;
 
     QVariantMap version1 = map.value(QLatin1String("QtVersion.1")).toMap();
-    if (!version1.count() == 6
+    if (version1.count() != 6
             || !version1.contains(QLatin1String(ID))
             || version1.value(QLatin1String(ID)).toInt() != -1
             || !version1.contains(QLatin1String(DISPLAYNAME))
diff --git a/src/tools/sdktool/addtoolchainoperation.cpp b/src/tools/sdktool/addtoolchainoperation.cpp
index 01317d7b9a0252526147e3f15ca96ca7329c9d9d..73acc045f8682acde5b104ebbdf2cff74d402b08 100644
--- a/src/tools/sdktool/addtoolchainoperation.cpp
+++ b/src/tools/sdktool/addtoolchainoperation.cpp
@@ -183,7 +183,7 @@ bool AddToolChainOperation::test() const
     map = addToolChain(map, QLatin1String("testId2"), QLatin1String("name"), QLatin1String("/tmp/test"),
                             QLatin1String("test-abi"), QLatin1String("test-abi,test-abi2"),
                             KeyValuePairList() << KeyValuePair(QLatin1String("ExtraKey"), QVariant(QLatin1String("ExtraValue"))));
-    if (!map.value(QLatin1String(COUNT)).toInt() == 2
+    if (map.value(QLatin1String(COUNT)).toInt() != 2
             || !map.contains(QString::fromLatin1(PREFIX) + QLatin1Char('0'))
             || !map.contains(QString::fromLatin1(PREFIX) + QLatin1Char('1')))
         return false;
diff --git a/tests/system/objects.map b/tests/system/objects.map
index ce30f1bdafdef0da47d77f4e89c4dd24a93242ff..98896e6c4f837a49fef3a5a65c6dedf064eb5202 100644
--- a/tests/system/objects.map
+++ b/tests/system/objects.map
@@ -105,6 +105,8 @@
 :QtSupport__Internal__QtVersionManager.QLabel	{container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' type='QLabel' unnamed='1' visible='1'}
 :QtSupport__Internal__QtVersionManager.qmake_QLabel	{container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='qmakePath' type='QLabel' visible='1'}
 :QtSupport__Internal__QtVersionManager.qtdirList_QTreeWidget	{container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='qtdirList' type='QTreeWidget' visible='1'}
+:Revert to Saved.Proceed_QPushButton	{text='Proceed' type='QPushButton' unnamed='1' visible='1' window=':Revert to Saved_QMessageBox'}
+:Revert to Saved_QMessageBox	{text?='You will lose your current changes if you proceed reverting*' type='QMessageBox' unnamed='1' visible='1'}
 :Startup.contextHelpComboBox_QComboBox	{container=':Form.Startup_QGroupBox' name='contextHelpComboBox' type='QComboBox' visible='1'}
 :Symbol Server_Utils::CheckableMessageBox	{type='Utils::CheckableMessageBox' unnamed='1' visible='1' windowTitle='Symbol Server'}
 :addToVersionControlComboBox_QComboBox	{name='addToVersionControlComboBox' type='QComboBox' visible='1'}
diff --git a/tests/system/settings/unix/Nokia/qtcreator/toolchains.xml b/tests/system/settings/unix/Nokia/qtcreator/toolchains.xml
index 05a7e5e39b675c23b899dd8170ce8ab58ea0e9f5..a2525c73ac07224f2b6c4965bf85fadf1184619c 100644
--- a/tests/system/settings/unix/Nokia/qtcreator/toolchains.xml
+++ b/tests/system/settings/unix/Nokia/qtcreator/toolchains.xml
@@ -10,6 +10,7 @@
     <value type="QString">x86-linux-generic-elf-64bit</value>
     <value type="QString">x86-linux-generic-elf-32bit</value>
    </valuelist>
+   <value type="QString" key="ProjectExplorer.GccToolChain.TargetAbi">SET_BY_SQUISH</value>
    <value type="bool" key="ProjectExplorer.ToolChain.Autodetect">false</value>
    <value type="QString" key="ProjectExplorer.ToolChain.DisplayName">GCC</value>
    <value type="QString" key="ProjectExplorer.ToolChain.Id">ProjectExplorer.ToolChain.Gcc:{c3f59b87-6997-4bd8-8067-ee04dc536371}</value>
diff --git a/tests/system/shared/qtcreator.py b/tests/system/shared/qtcreator.py
index 1bb7c5d3fcb8b12574632c83eb9df11919ccc843..6ae6dc9cc4eb4eb872eb7007ef3566aac5ef12ad 100644
--- a/tests/system/shared/qtcreator.py
+++ b/tests/system/shared/qtcreator.py
@@ -5,6 +5,7 @@ import glob;
 import atexit;
 import codecs;
 import subprocess;
+import sys
 import errno;
 from datetime import datetime,timedelta;
 
@@ -83,6 +84,69 @@ def substituteTildeWithinToolchains(settingsDir):
     os.remove(origToolchains)
     test.log("Substituted all tildes with '%s' inside toolchains.xml..." % home)
 
+def __guessABI__(supportedABIs, use64Bit):
+    if use64Bit:
+        searchFor = "64bit"
+    else:
+        searchFor = "32bit"
+    for abi in supportedABIs:
+        if searchFor in abi:
+            return abi
+    if use64Bit:
+        test.log("Supported ABIs do not include an ABI supporting 64bit - trying 32bit now")
+        return __guessABI__(supportedABIs, False)
+    test.fatal('Could not guess ABI!',
+               'Given ABIs: %s' % str(supportedABIs))
+    return ''
+
+def __is64BitOS__():
+    if platform.system() == 'Darwin':
+        return sys.maxsize > (2 ** 32)
+    if platform.system() in ('Microsoft', 'Windows'):
+        machine = os.getenv("PROCESSOR_ARCHITEW6432", os.getenv("PROCESSOR_ARCHITECTURE"))
+    else:
+        machine = platform.machine()
+    if machine:
+        return '64' in machine
+    else:
+        return False
+
+def substituteUnchosenTargetABIs(settingsDir):
+    class ReadState:
+        NONE = 0
+        READING = 1
+        CLOSED = 2
+
+    on64Bit = __is64BitOS__()
+    toolchains = os.path.join(settingsDir, "Nokia", 'qtcreator', 'toolchains.xml')
+    origToolchains = toolchains + "_orig"
+    os.rename(toolchains, origToolchains)
+    origFile = open(origToolchains, "r")
+    modifiedFile = open(toolchains, "w")
+    supported = []
+    readState = ReadState.NONE
+    for line in origFile:
+        if readState == ReadState.NONE:
+            if "SupportedAbis" in line:
+                supported = []
+                readState = ReadState.READING
+        elif readState == ReadState.READING:
+            if "</valuelist>" in line:
+                readState = ReadState.CLOSED
+            else:
+                supported.append(line.split(">", 1)[1].rsplit("<", 1)[0])
+        elif readState == ReadState.CLOSED:
+            if "SupportedAbis" in line:
+                supported = []
+                readState = ReadState.READING
+            elif "SET_BY_SQUISH" in line:
+                line = line.replace("SET_BY_SQUISH", __guessABI__(supported, on64Bit))
+        modifiedFile.write(line)
+    origFile.close()
+    modifiedFile.close()
+    os.remove(origToolchains)
+    test.log("Substituted unchosen ABIs inside toolchains.xml...")
+
 if platform.system() in ('Windows', 'Microsoft'):
     sdkPath = "C:\\QtSDK"
     cwd = os.getcwd()       # current dir is directory holding qtcreator.py
@@ -103,5 +167,6 @@ if os.getenv("SYSTEST_NOSETTINGSPATH") != "1":
     shutil.copytree(cwd, tmpSettingsDir)
     if platform.system() in ('Linux', 'Darwin'):
         substituteTildeWithinToolchains(tmpSettingsDir)
+    substituteUnchosenTargetABIs(tmpSettingsDir)
     atexit.register(__removeTmpSettingsDir__)
     SettingsPath = ' -settingspath "%s"' % tmpSettingsDir
diff --git a/tests/system/suite_editors/suite.conf b/tests/system/suite_editors/suite.conf
new file mode 100644
index 0000000000000000000000000000000000000000..717453e22dc5afe5e538ae1650e142b34f2d1125
--- /dev/null
+++ b/tests/system/suite_editors/suite.conf
@@ -0,0 +1,12 @@
+AUT=qtcreator
+CLASS=
+CLASSPATH=
+CWD=
+ENVVARS=envvars
+HOOK_SUB_PROCESSES=false
+IMPLICITAUTSTART=0
+LANGUAGE=Python
+OBJECTMAP=../objects.map
+TEST_CASES=tst_memberoperator
+VERSION=2
+WRAPPERS=Qt
diff --git a/tests/system/suite_editors/tst_memberoperator/test.py b/tests/system/suite_editors/tst_memberoperator/test.py
new file mode 100644
index 0000000000000000000000000000000000000000..7e329ba900f54a642b262f7c6e88d9cae6676d28
--- /dev/null
+++ b/tests/system/suite_editors/tst_memberoperator/test.py
@@ -0,0 +1,26 @@
+source("../../shared/qtcreator.py")
+
+def main():
+    startApplication("qtcreator" + SettingsPath)
+    createProject_Qt_Console(tempDir(), "SquishProject")
+    selectFromLocator("main.cpp")
+    cppwindow = waitForObject(":Qt Creator_CppEditor::Internal::CPPEditorWidget")
+
+    for record in testData.dataset("usages.tsv"):
+        include = testData.field(record, "include")
+        if include:
+            placeCursorToLine(cppwindow, "#include <QCoreApplication>")
+            typeLines(cppwindow, ("", "#include " + include))
+        placeCursorToLine(cppwindow, "return a.exec();")
+        typeLines(cppwindow, ("<Up>", testData.field(record, "declaration")))
+        type(cppwindow, testData.field(record, "usage"))
+        waitForSignal("{type='CppTools::Internal::CppModelManager' unnamed='1'}",
+                      "sourceFilesRefreshed(QStringList)")
+        type(cppwindow, testData.field(record, "operator"))
+        waitForSignal("{type='CppTools::Internal::CppModelManager' unnamed='1'}",
+                      "sourceFilesRefreshed(QStringList)")
+        test.compare(str(lineUnderCursor(cppwindow)).strip(), testData.field(record, "expected"))
+        invokeMenuItem("File", 'Revert "main.cpp" to Saved')
+        clickButton(waitForObject(":Revert to Saved.Proceed_QPushButton"))
+
+    invokeMenuItem("File", "Exit")
diff --git a/tests/system/suite_editors/tst_memberoperator/testdata/usages.tsv b/tests/system/suite_editors/tst_memberoperator/testdata/usages.tsv
new file mode 100644
index 0000000000000000000000000000000000000000..a1e21767bf05511d0776cd7a5019f4cb38ef3262
--- /dev/null
+++ b/tests/system/suite_editors/tst_memberoperator/testdata/usages.tsv
@@ -0,0 +1,23 @@
+"include"	"declaration"	"usage"	"operator"	"expected"
+""	""	"syntaxError"	"."	"syntaxError."
+""	""	"argc"	"."	"argc."
+""	""	"argv[0]"	"."	"argv[0]."
+""	"QCoreApplication qa;"	"qa"	"."	"qa."
+""	"QCoreApplication *p;"	"p"	"."	"p->"
+""	"QCoreApplication &ref = a;"	"ref"	"."	"ref."
+"<QPointer>"	"QPointer p;"	"p"	"."	"p."
+"<QPointer>"	"QPointer *poi;"	"poi"	"."	"poi->"
+"<QPointer>"	"QPointer &poi;"	"poi"	"."	"poi."
+"<QPointer>"	"QPointer poi[5];"	"poi[2]"	"."	"poi[2]."
+"<QPointer>"	"QPointer *poi[5];"	"poi[2]"	"."	"poi[2]->"
+"<memory>"	"std::auto_ptr sap;"	"sap"	"."	"sap."
+"<memory>"	"std::auto_ptr *sap;"	"sap"	"."	"sap->"
+"<memory>"	"std::auto_ptr &sap;"	"sap"	"."	"sap."
+"<memory>"	"std::auto_ptr sap[10];"	"sap[2]"	"."	"sap[2]."
+"<memory>"	"std::auto_ptr *sap[10];"	"sap[2]"	"."	"sap[2]->"
+"<QVector>"	"QVector<QCoreApplication> vec;"	"vec"	"."	"vec."
+"<QVector>"	"QVector<QCoreApplication *> vec;"	"vec"	"."	"vec."
+"<QVector>"	"QVector<QCoreApplication> *vec;"	"vec"	"."	"vec->"
+"<QVector>"	"QVector<QCoreApplication *> *vec;"	"vec"	"."	"vec->"
+"<QVector>"	"QVector<QCoreApplication> vec;"	"vec[0]"	"."	"vec[0]."
+"<QVector>"	"QVector<QCoreApplication *> vec;"	"vec[0]"	"."	"vec[0]->"