diff --git a/src/libs/utils/buildablehelperlibrary.cpp b/src/libs/utils/buildablehelperlibrary.cpp
index 0f44987cfb9b13e3b1e053cca77882f9cac336f3..c9deb323c0a0168f5dedf4d7c27aae5c2a4dc562 100644
--- a/src/libs/utils/buildablehelperlibrary.cpp
+++ b/src/libs/utils/buildablehelperlibrary.cpp
@@ -48,7 +48,7 @@
 
 namespace Utils {
 
-QString BuildableHelperLibrary::findSystemQt(const Utils::Environment &env)
+Utils::FileName BuildableHelperLibrary::findSystemQt(const Utils::Environment &env)
 {
     QStringList paths = env.path();
     foreach (const QString &path, paths) {
@@ -59,18 +59,18 @@ QString BuildableHelperLibrary::findSystemQt(const Utils::Environment &env)
             const QFileInfo qmake(prefix + possibleCommand);
             if (qmake.exists()) {
                 if (!qtVersionForQMake(qmake.absoluteFilePath()).isNull()) {
-                    return qmake.absoluteFilePath();
+                    return Utils::FileName(qmake);
                 }
             }
         }
     }
-    return QString();
+    return Utils::FileName();
 }
 
-QString BuildableHelperLibrary::qtInstallDataDir(const QString &qmakePath)
+QString BuildableHelperLibrary::qtInstallDataDir(const Utils::FileName &qmakePath)
 {
     QProcess proc;
-    proc.start(qmakePath, QStringList() << QLatin1String("-query") << QLatin1String("QT_INSTALL_DATA"));
+    proc.start(qmakePath.toString(), QStringList() << QLatin1String("-query") << QLatin1String("QT_INSTALL_DATA"));
     if (proc.waitForFinished())
         return QString(proc.readAll().trimmed());
     return QString();
@@ -269,16 +269,16 @@ bool BuildableHelperLibrary::buildHelper(const BuildHelperArguments &arguments,
     if (!arguments.targetMode.isEmpty())
         qmakeArgs << arguments.targetMode;
     if (!arguments.mkspec.isEmpty())
-        qmakeArgs << QLatin1String("-spec") << arguments.mkspec;
+        qmakeArgs << QLatin1String("-spec") << arguments.mkspec.toUserOutput();
     qmakeArgs << arguments.proFilename;
     qmakeArgs << arguments.qmakeArguments;
 
     log->append(newline);
     log->append(QCoreApplication::translate("ProjectExplorer::BuildableHelperLibrary",
-                                            "Running %1 %2 ...\n").arg(arguments.qmakeCommand,
+                                            "Running %1 %2 ...\n").arg(arguments.qmakeCommand.toUserOutput(),
                                                                        qmakeArgs.join(" ")));
 
-    if (!runBuildProcess(proc, arguments.qmakeCommand, qmakeArgs, 30000, false, log, errorMessage))
+    if (!runBuildProcess(proc, arguments.qmakeCommand.toString(), qmakeArgs, 30000, false, log, errorMessage))
         return false;
     log->append(newline);
     if (makeFullPath.isEmpty()) {
diff --git a/src/libs/utils/buildablehelperlibrary.h b/src/libs/utils/buildablehelperlibrary.h
index ab0ba6925dc05e43b2d1e2d0fedc49eabdefff1b..00baa286e623696fe1490819506ff09d8e11342b 100644
--- a/src/libs/utils/buildablehelperlibrary.h
+++ b/src/libs/utils/buildablehelperlibrary.h
@@ -35,6 +35,7 @@
 
 #include "utils_global.h"
 #include <utils/environment.h>
+#include <utils/fileutils.h>
 
 #include <QtCore/QString>
 
@@ -49,7 +50,7 @@ class QTCREATOR_UTILS_EXPORT BuildableHelperLibrary
 public:
     // returns the full path to the first qmake, qmake-qt4, qmake4 that has
     // at least version 2.0.0 and thus is a qt4 qmake
-    static QString findSystemQt(const Utils::Environment &env);
+    static FileName findSystemQt(const Utils::Environment &env);
     // return true if the qmake at qmakePath is qt4 (used by QtVersion)
     static QString qtVersionForQMake(const QString &qmakePath);
     static QString qtVersionForQMake(const QString &qmakePath, bool *qmakeIsExecutable);
@@ -57,7 +58,7 @@ public:
     static QStringList possibleQMakeCommands();
 
     static QString qtInstallHeadersDir(const QString &qmakePath);
-    static QString qtInstallDataDir(const QString &qmakePath);
+    static QString qtInstallDataDir(const FileName &qmakePath);
 
     static QString byInstallDataHelper(const QString &sourcePath,
                                        const QStringList &sourceFileNames,
@@ -73,9 +74,9 @@ public:
         QString directory;
         Utils::Environment environment;
 
-        QString qmakeCommand;
+        Utils::FileName qmakeCommand;
         QString targetMode;
-        QString mkspec;
+        Utils::FileName mkspec;
         QString proFilename;
         QStringList qmakeArguments;
 
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp
index 4a306ef79b571e68fce9a1f356bd8e137391fa28..def3ed36b7083643d27801d78ffe3c1fefe6cb22 100644
--- a/src/libs/utils/fileutils.cpp
+++ b/src/libs/utils/fileutils.cpp
@@ -530,11 +530,24 @@ FileName FileName::relativeChildPath(const FileName &parent) const
 }
 
 /// Appends \a s, ensuring a / between the parts
-void FileName::appendPath(const QString &s)
+FileName &FileName::appendPath(const QString &s)
 {
     if (QString::endsWith(QLatin1Char('/')))
         append(QLatin1Char('/'));
     append(s);
+    return *this;
+}
+
+FileName &FileName::append(const QString &str)
+{
+    QString::append(str);
+    return *this;
+}
+
+FileName &FileName::append(QChar str)
+{
+    QString::append(str);
+    return *this;
 }
 
 } // namespace Utils
diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h
index 308d9199cc28d7fecd8d5e42fda09920bff527ec..5f4b8a56e9b36d63758e009adbd390730d6089f1 100644
--- a/src/libs/utils/fileutils.h
+++ b/src/libs/utils/fileutils.h
@@ -163,7 +163,9 @@ public:
     bool endsWith(const QString &s) const;
 
     Utils::FileName relativeChildPath(const FileName &parent) const;
-    void appendPath(const QString &s);
+    Utils::FileName &appendPath(const QString &s);
+    Utils::FileName &append(const QString &str);
+    Utils::FileName &append(QChar str);
 
     using QString::size;
     using QString::count;
@@ -171,7 +173,6 @@ public:
     using QString::isEmpty;
     using QString::isNull;
     using QString::clear;
-    using QString::append;
 private:
     static Qt::CaseSensitivity cs;
     FileName(const QString &string);
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
index f0e298f50e6c45765fd01bf376d6e8c2ecdcfa03..f6d84d5fef0dead06f07840d586fa8efe8ebc220 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
@@ -241,7 +241,7 @@ void CMakeRunConfiguration::setCommandLineArguments(const QString &newText)
 
 QString CMakeRunConfiguration::dumperLibrary() const
 {
-    QString qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(environment());
+    Utils::FileName qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(environment());
     QString qtInstallData = ProjectExplorer::DebuggingHelperLibrary::qtInstallDataDir(qmakePath);
     QString dhl = ProjectExplorer::DebuggingHelperLibrary::debuggingHelperLibraryByInstallData(qtInstallData);
     return dhl;
@@ -249,7 +249,7 @@ QString CMakeRunConfiguration::dumperLibrary() const
 
 QStringList CMakeRunConfiguration::dumperLibraryLocations() const
 {
-    QString qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(environment());
+    Utils::FileName qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(environment());
     QString qtInstallData = ProjectExplorer::DebuggingHelperLibrary::qtInstallDataDir(qmakePath);
     return ProjectExplorer::DebuggingHelperLibrary::debuggingHelperLibraryDirectories(qtInstallData);
 }
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 7c2b2351a3bd1fefc52c2e4617b20534bbab5d99..60fc25695a36a812f3805a8f6aaeaf16e7747baa 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -678,26 +678,26 @@ QString DebuggerRunControlFactory::displayName() const
 }
 
 // Find Qt installation by running qmake
-static inline QString findQtInstallPath(const QString &qmakePath)
+static inline QString findQtInstallPath(const Utils::FileName &qmakePath)
 {
     QProcess proc;
     QStringList args;
     args.append(_("-query"));
     args.append(_("QT_INSTALL_HEADERS"));
-    proc.start(qmakePath, args);
+    proc.start(qmakePath.toString(), args);
     if (!proc.waitForStarted()) {
-        qWarning("%s: Cannot start '%s': %s", Q_FUNC_INFO, qPrintable(qmakePath),
+        qWarning("%s: Cannot start '%s': %s", Q_FUNC_INFO, qPrintable(qmakePath.toString()),
            qPrintable(proc.errorString()));
         return QString();
     }
     proc.closeWriteChannel();
     if (!proc.waitForFinished()) {
         Utils::SynchronousProcess::stopProcess(proc);
-        qWarning("%s: Timeout running '%s'.", Q_FUNC_INFO, qPrintable(qmakePath));
+        qWarning("%s: Timeout running '%s'.", Q_FUNC_INFO, qPrintable(qmakePath.toString()));
         return QString();
     }
     if (proc.exitStatus() != QProcess::NormalExit) {
-        qWarning("%s: '%s' crashed.", Q_FUNC_INFO, qPrintable(qmakePath));
+        qWarning("%s: '%s' crashed.", Q_FUNC_INFO, qPrintable(qmakePath.toString()));
         return QString();
     }
     const QByteArray ba = proc.readAllStandardOutput().trimmed();
@@ -738,7 +738,7 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
 
     if (const ProjectExplorer::Target *target = runConfiguration->target()) {
         if (QByteArray(target->metaObject()->className()).contains("Qt4")) {
-            const QString qmake = Utils::BuildableHelperLibrary::findSystemQt(sp.environment);
+            const Utils::FileName qmake = Utils::BuildableHelperLibrary::findSystemQt(sp.environment);
             if (!qmake.isEmpty())
                 sp.qtInstallPath = findQtInstallPath(qmake);
         }
diff --git a/src/plugins/madde/maemoglobal.cpp b/src/plugins/madde/maemoglobal.cpp
index cd41e096d0cf0a1a7361a54c89a0bd88ff51b28c..e28cfc189f7e3b183ea5738bc17192d7ebb6dee5 100644
--- a/src/plugins/madde/maemoglobal.cpp
+++ b/src/plugins/madde/maemoglobal.cpp
@@ -176,7 +176,12 @@ QString MaemoGlobal::maddeRoot(const QString &qmakePath)
 
 QString MaemoGlobal::targetRoot(const QString &qmakePath)
 {
-    return QDir::cleanPath(qmakePath).remove(binQmake);
+#ifdef Q_OS_WIN
+    Qt::CaseSensitivity cs = Qt::CaseInsensitive;
+#else
+    Qt::CaseSensitivity cs = Qt::CaseSensitive;
+#endif
+    return QDir::cleanPath(qmakePath).remove(binQmake, cs);
 }
 
 QString MaemoGlobal::targetName(const QString &qmakePath)
diff --git a/src/plugins/madde/maemoinstalltosysrootstep.cpp b/src/plugins/madde/maemoinstalltosysrootstep.cpp
index 56987e3a3e39cca28e547c01df212d8dfc48761f..d09a0ddf24dc6423f6fd30edd914d5c5089e730d 100644
--- a/src/plugins/madde/maemoinstalltosysrootstep.cpp
+++ b/src/plugins/madde/maemoinstalltosysrootstep.cpp
@@ -179,7 +179,7 @@ bool AbstractMaemoInstallPackageToSysrootStep::init()
         return false;
     }
 
-    m_qmakeCommand = bc->qtVersion()->qmakeCommand();
+    m_qmakeCommand = bc->qtVersion()->qmakeCommand().toString();
     m_packageFilePath = pStep->packageFilePath();
     return true;
 }
@@ -403,12 +403,12 @@ bool MaemoMakeInstallToSysrootStep::init()
 
     }
     Utils::Environment env = bc->environment();
-    MaemoGlobal::addMaddeEnvironment(env, qtVersion->qmakeCommand());
-    QString command = MaemoGlobal::madCommand(qtVersion->qmakeCommand());
+    MaemoGlobal::addMaddeEnvironment(env, qtVersion->qmakeCommand().toString());
+    QString command = MaemoGlobal::madCommand(qtVersion->qmakeCommand().toString());
     QStringList args = QStringList() << QLatin1String("-t")
-        << MaemoGlobal::targetName(qtVersion->qmakeCommand()) << QLatin1String("make")
+        << MaemoGlobal::targetName(qtVersion->qmakeCommand().toString()) << QLatin1String("make")
         << QLatin1String("install") << (QLatin1String("INSTALL_ROOT=") + qtVersion->systemRoot());
-    MaemoGlobal::transformMaddeCall(command, args, qtVersion->qmakeCommand());
+    MaemoGlobal::transformMaddeCall(command, args, qtVersion->qmakeCommand().toString());
     processParameters()->setCommand(command);
     processParameters()->setArguments(args.join(QLatin1String(" ")));
     processParameters()->setEnvironment(env);
diff --git a/src/plugins/madde/maemopackagecreationstep.cpp b/src/plugins/madde/maemopackagecreationstep.cpp
index 205ae1fafac8f4cbe873fbb324265222274b7fd2..f795657193209faeb5f5b291b4634940f07c7065 100644
--- a/src/plugins/madde/maemopackagecreationstep.cpp
+++ b/src/plugins/madde/maemopackagecreationstep.cpp
@@ -101,7 +101,7 @@ bool AbstractMaemoPackageCreationStep::init()
         return false;
     }
 
-    m_qmakeCommand = qt4BuildConfiguration()->qtVersion()->qmakeCommand();
+    m_qmakeCommand = qt4BuildConfiguration()->qtVersion()->qmakeCommand().toString();
 
     return true;
 }
@@ -292,7 +292,7 @@ bool MaemoDebianPackageCreationStep::init()
 {
     if (!AbstractMaemoPackageCreationStep::init())
         return false;
-    m_maddeRoot = MaemoGlobal::maddeRoot(qt4BuildConfiguration()->qtVersion()->qmakeCommand());
+    m_maddeRoot = MaemoGlobal::maddeRoot(qt4BuildConfiguration()->qtVersion()->qmakeCommand().toString());
     m_projectDirectory = project()->projectDirectory();
     m_pkgFileName = maemoTarget()->packageFileName();
     m_packageName = maemoTarget()->packageName();
diff --git a/src/plugins/madde/maemopublisherfremantlefree.cpp b/src/plugins/madde/maemopublisherfremantlefree.cpp
index 70bd593a0e44258fb8725f9dcafbbc7ce8a3f555..9cb32c51ec928d1ea438b26f2edf669e2629ab55 100644
--- a/src/plugins/madde/maemopublisherfremantlefree.cpp
+++ b/src/plugins/madde/maemopublisherfremantlefree.cpp
@@ -378,7 +378,7 @@ void MaemoPublisherFremantleFree::runDpkgBuildPackage()
     emit progressReport(tr("Building source package..."));
     const QStringList args = QStringList() << QLatin1String("dpkg-buildpackage")
         << QLatin1String("-S") << QLatin1String("-us") << QLatin1String("-uc");
-    MaemoGlobal::callMad(*m_process, args, lqt->qmakeCommand(), true);
+    MaemoGlobal::callMad(*m_process, args, lqt->qmakeCommand().toString(), true);
 }
 
 // We have to implement the SCP protocol, because the maemo.org
diff --git a/src/plugins/madde/maemopublishingbuildsettingspagefremantlefree.cpp b/src/plugins/madde/maemopublishingbuildsettingspagefremantlefree.cpp
index 6e68c1956ba47c032bcff247fafd7e65d61d39a3..f6062152005d8b06785db046a9a2fdb7c1f89166 100644
--- a/src/plugins/madde/maemopublishingbuildsettingspagefremantlefree.cpp
+++ b/src/plugins/madde/maemopublishingbuildsettingspagefremantlefree.cpp
@@ -86,7 +86,7 @@ void MaemoPublishingBuildSettingsPageFremantleFree::collectBuildConfigurations(c
             QtSupport::BaseQtVersion *lqt = qt4Bc->qtVersion();
             if (!lqt)
                 continue;
-            if (MaemoGlobal::osType(lqt->qmakeCommand()) == QLatin1String(Maemo5OsType))
+            if (MaemoGlobal::osType(lqt->qmakeCommand().toString()) == QLatin1String(Maemo5OsType))
                 m_buildConfigs << qt4Bc;
         }
         break;
diff --git a/src/plugins/madde/maemopublishingwizardfactories.cpp b/src/plugins/madde/maemopublishingwizardfactories.cpp
index d21b3603c138ecee781eacea031c8c3780e60c8b..02d65d27c212725a22402711707a215fe423fc27 100644
--- a/src/plugins/madde/maemopublishingwizardfactories.cpp
+++ b/src/plugins/madde/maemopublishingwizardfactories.cpp
@@ -84,7 +84,7 @@ bool MaemoPublishingWizardFactoryFremantleFree::canCreateWizard(const Project *p
             QtSupport::BaseQtVersion *qt = qt4Bc->qtVersion();
             if (!qt)
                 continue;
-            if (MaemoGlobal::osType(qt->qmakeCommand()) == QLatin1String(Maemo5OsType))
+            if (MaemoGlobal::osType(qt->qmakeCommand().toString()) == QLatin1String(Maemo5OsType))
                 return true;
         }
         break;
diff --git a/src/plugins/madde/maemoqemuruntimeparser.cpp b/src/plugins/madde/maemoqemuruntimeparser.cpp
index 0e49137c5734a6610c2b0da917db563f3223429c..0c7822166134e39cff60fcf0ac75bff48f4c5f05 100644
--- a/src/plugins/madde/maemoqemuruntimeparser.cpp
+++ b/src/plugins/madde/maemoqemuruntimeparser.cpp
@@ -93,14 +93,14 @@ MaemoQemuRuntimeParser::MaemoQemuRuntimeParser(const QString &madInfoOutput,
 MaemoQemuRuntime MaemoQemuRuntimeParser::parseRuntime(const QtSupport::BaseQtVersion *qtVersion)
 {
     MaemoQemuRuntime runtime;
-    const QString maddeRootPath = MaemoGlobal::maddeRoot(qtVersion->qmakeCommand());
+    const QString maddeRootPath = MaemoGlobal::maddeRoot(qtVersion->qmakeCommand().toString());
     QProcess madProc;
-    if (!MaemoGlobal::callMad(madProc, QStringList() << QLatin1String("info"), qtVersion->qmakeCommand(), false))
+    if (!MaemoGlobal::callMad(madProc, QStringList() << QLatin1String("info"), qtVersion->qmakeCommand().toString(), false))
         return runtime;
     if (!madProc.waitForStarted() || !madProc.waitForFinished())
         return runtime;
     const QByteArray &madInfoOutput = madProc.readAllStandardOutput();
-    const QString &targetName = MaemoGlobal::targetName(qtVersion->qmakeCommand());
+    const QString &targetName = MaemoGlobal::targetName(qtVersion->qmakeCommand().toString());
     runtime = MaemoQemuRuntimeParserV2(madInfoOutput, targetName, maddeRootPath)
         .parseRuntime();
     if (!runtime.m_name.isEmpty()) {
diff --git a/src/plugins/madde/maemoqtversion.cpp b/src/plugins/madde/maemoqtversion.cpp
index d7c60bf61a7060091797f86532c8dae064e82ad9..4ab595d11e03979074bd80b8614fd4918e891f87 100644
--- a/src/plugins/madde/maemoqtversion.cpp
+++ b/src/plugins/madde/maemoqtversion.cpp
@@ -52,10 +52,10 @@ MaemoQtVersion::MaemoQtVersion() : QtSupport::BaseQtVersion()
 
 }
 
-MaemoQtVersion::MaemoQtVersion(const QString &path, bool isAutodetected, const QString &autodetectionSource)
+MaemoQtVersion::MaemoQtVersion(const Utils::FileName &path, bool isAutodetected, const QString &autodetectionSource)
     : QtSupport::BaseQtVersion(path, isAutodetected, autodetectionSource),
-      m_osType(MaemoGlobal::osType(path)),
-      m_isvalidVersion(MaemoGlobal::isValidMaemoQtVersion(path, m_osType))
+      m_osType(MaemoGlobal::osType(path.toString())),
+      m_isvalidVersion(MaemoGlobal::isValidMaemoQtVersion(path.toString(), m_osType))
 {
 
 }
@@ -68,7 +68,7 @@ MaemoQtVersion::~MaemoQtVersion()
 void MaemoQtVersion::fromMap(const QVariantMap &map)
 {
     QtSupport::BaseQtVersion::fromMap(map);
-    QString path = qmakeCommand();
+    QString path = qmakeCommand().toString();
     m_osType = MaemoGlobal::osType(path);
     m_isvalidVersion = MaemoGlobal::isValidMaemoQtVersion(path, m_osType);
 }
@@ -91,7 +91,7 @@ MaemoQtVersion *MaemoQtVersion::clone() const
 QString MaemoQtVersion::systemRoot() const
 {
     if (m_systemRoot.isNull()) {
-        QFile file(QDir::cleanPath(MaemoGlobal::targetRoot(qmakeCommand()))
+        QFile file(QDir::cleanPath(MaemoGlobal::targetRoot(qmakeCommand().toString()))
                    + QLatin1String("/information"));
         if (file.exists() && file.open(QIODevice::ReadOnly | QIODevice::Text)) {
             QTextStream stream(&file);
@@ -101,7 +101,7 @@ QString MaemoQtVersion::systemRoot() const
                 if (list.count() <= 1)
                     continue;
                 if (list.at(0) == QLatin1String("sysroot")) {
-                    m_systemRoot = MaemoGlobal::maddeRoot(qmakeCommand())
+                    m_systemRoot = MaemoGlobal::maddeRoot(qmakeCommand().toString())
                             + QLatin1String("/sysroots/") + list.at(1);
                 }
             }
@@ -178,7 +178,7 @@ QString MaemoQtVersion::osType() const
 
 void MaemoQtVersion::addToEnvironment(Utils::Environment &env) const
 {
-    const QString maddeRoot = MaemoGlobal::maddeRoot(qmakeCommand());
+    const QString maddeRoot = MaemoGlobal::maddeRoot(qmakeCommand().toString());
 
     // Needed to make pkg-config stuff work.
     env.prependOrSet(QLatin1String("SYSROOT_DIR"), QDir::toNativeSeparators(systemRoot()));
@@ -191,7 +191,7 @@ void MaemoQtVersion::addToEnvironment(Utils::Environment &env) const
 
     env.prependOrSetPath(QDir::toNativeSeparators(QString("%1/bin").arg(maddeRoot)));
     env.prependOrSetPath(QDir::toNativeSeparators(QString("%1/bin")
-        .arg(MaemoGlobal::targetRoot(qmakeCommand()))));
+        .arg(MaemoGlobal::targetRoot(qmakeCommand().toString()))));
 }
 
 } // namespace Internal
diff --git a/src/plugins/madde/maemoqtversion.h b/src/plugins/madde/maemoqtversion.h
index 6da0bf4a4d362001db196648c609de3f5a4bf23e..b5b06206082ebe345dcd5cf18f21657fb42bcb42 100644
--- a/src/plugins/madde/maemoqtversion.h
+++ b/src/plugins/madde/maemoqtversion.h
@@ -41,7 +41,7 @@ class MaemoQtVersion : public QtSupport::BaseQtVersion
 {
 public:
     MaemoQtVersion();
-    MaemoQtVersion(const QString &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
+    MaemoQtVersion(const Utils::FileName &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
     ~MaemoQtVersion();
 
     void fromMap(const QVariantMap &map);
diff --git a/src/plugins/madde/maemoqtversionfactory.cpp b/src/plugins/madde/maemoqtversionfactory.cpp
index e6ac8760b98c04f604cdca6f6fb0a8ba27e2da6e..126c4ec172147c7e0a697dc7affaa26f6c1c19ff 100644
--- a/src/plugins/madde/maemoqtversionfactory.cpp
+++ b/src/plugins/madde/maemoqtversionfactory.cpp
@@ -72,18 +72,19 @@ int MaemoQtVersionFactory::priority() const
     return 50;
 }
 
-QtSupport::BaseQtVersion *MaemoQtVersionFactory::create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected, const QString &autoDetectionSource)
+QtSupport::BaseQtVersion *MaemoQtVersionFactory::create(const Utils::FileName &qmakeCommand, ProFileEvaluator *evaluator, bool isAutoDetected, const QString &autoDetectionSource)
 {
     Q_UNUSED(evaluator);
     // we are the fallback :) so we don't care what kinf of qt it is
-    QFileInfo fi(qmakePath);
+    QFileInfo fi = qmakeCommand.toFileInfo();
     if (!fi.exists() || !fi.isExecutable() || !fi.isFile())
         return 0;
 
+    QString qmakePath = qmakeCommand.toString();
     if (MaemoGlobal::isValidMaemo5QtVersion(qmakePath)
             || MaemoGlobal::isValidHarmattanQtVersion(qmakePath)
             || MaemoGlobal::isValidMeegoQtVersion(qmakePath))
-        return new MaemoQtVersion(qmakePath, isAutoDetected, autoDetectionSource);
+        return new MaemoQtVersion(qmakeCommand, isAutoDetected, autoDetectionSource);
     return 0;
 }
 
diff --git a/src/plugins/madde/maemoqtversionfactory.h b/src/plugins/madde/maemoqtversionfactory.h
index 620aeabcbfdd5c3ac77a5dea679907920dae72b8..868446875d674eb5a30fea29756e74e7c99162a1 100644
--- a/src/plugins/madde/maemoqtversionfactory.h
+++ b/src/plugins/madde/maemoqtversionfactory.h
@@ -48,7 +48,7 @@ public:
     virtual QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data);
 
     virtual int priority() const;
-    virtual QtSupport::BaseQtVersion *create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
+    virtual QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
 };
 
 } // namespace Internal
diff --git a/src/plugins/madde/maemoremotemounter.cpp b/src/plugins/madde/maemoremotemounter.cpp
index 6144036243c2c5c384ac4a6b4fa3d0899d7cdb0e..21d78e850cae21a16e4916b36cfb0235a8653695 100644
--- a/src/plugins/madde/maemoremotemounter.cpp
+++ b/src/plugins/madde/maemoremotemounter.cpp
@@ -82,7 +82,7 @@ void MaemoRemoteMounter::setBuildConfiguration(const Qt4BuildConfiguration *bc)
     const AbstractQt4MaemoTarget * const maemoTarget
         = qobject_cast<AbstractQt4MaemoTarget *>(bc->target());
     m_remoteMountsAllowed = maemoTarget && maemoTarget->allowsRemoteMounts();
-    m_maddeRoot = qtVersion ? MaemoGlobal::maddeRoot(qtVersion->qmakeCommand()) : QString();
+    m_maddeRoot = qtVersion ? MaemoGlobal::maddeRoot(qtVersion->qmakeCommand().toString()) : QString();
 }
 
 void MaemoRemoteMounter::addMountSpecification(const MaemoMountSpecification &mountSpec,
diff --git a/src/plugins/madde/maemotoolchain.cpp b/src/plugins/madde/maemotoolchain.cpp
index 491497f436d5d1527bd00ccb7c8bfcbd5cb36172..aff7449fb45f8e45b9c9a9c5f2c4cc686cf6d1cf 100644
--- a/src/plugins/madde/maemotoolchain.cpp
+++ b/src/plugins/madde/maemotoolchain.cpp
@@ -83,9 +83,9 @@ ProjectExplorer::Abi MaemoToolChain::targetAbi() const
     return m_targetAbi;
 }
 
-QString MaemoToolChain::mkspec() const
+Utils::FileName MaemoToolChain::mkspec() const
 {
-    return QString(); // always use default
+    return Utils::FileName(); // always use default
 }
 
 bool MaemoToolChain::isValid() const
@@ -189,8 +189,8 @@ MaemoToolChainConfigWidget::MaemoToolChainConfigWidget(MaemoToolChain *tc) :
                       "<tr><td>Path to MADDE:</td><td>%1</td></tr>"
                       "<tr><td>Path to MADDE target:</td><td>%2</td></tr>"
                       "<tr><td>Debugger:</td/><td>%3</td></tr></body></html>")
-                   .arg(QDir::toNativeSeparators(MaemoGlobal::maddeRoot(v->qmakeCommand())),
-                        QDir::toNativeSeparators(MaemoGlobal::targetRoot(v->qmakeCommand())),
+                   .arg(QDir::toNativeSeparators(MaemoGlobal::maddeRoot(v->qmakeCommand().toString())),
+                        QDir::toNativeSeparators(MaemoGlobal::targetRoot(v->qmakeCommand().toString())),
                         QDir::toNativeSeparators(tc->debuggerCommand())));
     layout->addWidget(label);
 }
@@ -282,11 +282,11 @@ QList<ProjectExplorer::ToolChain *> MaemoToolChainFactory::createToolChainList(c
             target = "Maemo 6";
         else if (v->supportsTargetId(Constants::MEEGO_DEVICE_TARGET_ID))
             target = "Meego";
-        mTc->setDisplayName(tr("%1 GCC (%2)").arg(target).arg(MaemoGlobal::maddeRoot(mqv->qmakeCommand())));
-        mTc->setCompilerPath(MaemoGlobal::targetRoot(mqv->qmakeCommand()) + QLatin1String("/bin/gcc"));
+        mTc->setDisplayName(tr("%1 GCC (%2)").arg(target).arg(MaemoGlobal::maddeRoot(mqv->qmakeCommand().toString())));
+        mTc->setCompilerPath(MaemoGlobal::targetRoot(mqv->qmakeCommand().toString()) + QLatin1String("/bin/gcc"));
         mTc->setDebuggerCommand(ProjectExplorer::ToolChainManager::instance()->defaultDebugger(mqv->qtAbis().at(0)));
         if (mTc->debuggerCommand().isEmpty())
-            mTc->setDebuggerCommand(MaemoGlobal::targetRoot(mqv->qmakeCommand()) + QLatin1String("/bin/gdb"));
+            mTc->setDebuggerCommand(MaemoGlobal::targetRoot(mqv->qmakeCommand().toString()) + QLatin1String("/bin/gdb"));
         result.append(mTc);
     }
     return result;
diff --git a/src/plugins/madde/maemotoolchain.h b/src/plugins/madde/maemotoolchain.h
index d066cf2362bfe528fe3c12f3d82a657e82c00eb8..c26caa6121e4b91be53d2b3e490bf81a3e9d5c4f 100644
--- a/src/plugins/madde/maemotoolchain.h
+++ b/src/plugins/madde/maemotoolchain.h
@@ -50,7 +50,7 @@ public:
 
     QString typeName() const;
     ProjectExplorer::Abi targetAbi() const;
-    QString mkspec() const;
+    Utils::FileName mkspec() const;
 
     bool isValid() const;
     bool canClone() const;
diff --git a/src/plugins/madde/qt4maemotarget.cpp b/src/plugins/madde/qt4maemotarget.cpp
index 278f3141931c639dfe8bda5a82bfd922eb5675b5..e7072ece73d13abe9b7039d210841e9c86b0ece2 100644
--- a/src/plugins/madde/qt4maemotarget.cpp
+++ b/src/plugins/madde/qt4maemotarget.cpp
@@ -767,7 +767,7 @@ AbstractQt4MaemoTarget::ActionStatus AbstractDebBasedQt4MaemoTarget::createSpeci
         raiseError(tr("Unable to create Debian templates: No Qt version set"));
         return ActionFailed;
     }
-    if (!MaemoGlobal::callMad(dh_makeProc, dh_makeArgs, lqt->qmakeCommand(), true)
+    if (!MaemoGlobal::callMad(dh_makeProc, dh_makeArgs, lqt->qmakeCommand().toString(), true)
             || !dh_makeProc.waitForStarted()) {
         raiseError(tr("Unable to create Debian templates: dh_make failed (%1)")
             .arg(dh_makeProc.errorString()));
@@ -1005,7 +1005,7 @@ QString AbstractRpmBasedQt4MaemoTarget::packageFileName() const
         return QString();
     return packageName() + QLatin1Char('-') + projectVersion() + QLatin1Char('-')
         + QString::fromUtf8(getValueForTag(ReleaseTag, 0)) + QLatin1Char('.')
-        + MaemoGlobal::architecture(lqt->qmakeCommand())
+        + MaemoGlobal::architecture(lqt->qmakeCommand().toString())
         + QLatin1String(".rpm");
 }
 
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
index 7740b638e3d432d6320854a8c8c7712d2f820d43..8cb89f70d755664456660e5181a82b310d529d4d 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
@@ -323,14 +323,14 @@ QWidget *CustomExecutableRunConfiguration::createConfigurationWidget()
 
 QString CustomExecutableRunConfiguration::dumperLibrary() const
 {
-    QString qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(environment());
+    Utils::FileName qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(environment());
     QString qtInstallData = ProjectExplorer::DebuggingHelperLibrary::qtInstallDataDir(qmakePath);
     return ProjectExplorer::DebuggingHelperLibrary::debuggingHelperLibraryByInstallData(qtInstallData);
 }
 
 QStringList CustomExecutableRunConfiguration::dumperLibraryLocations() const
 {
-    QString qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(environment());
+    Utils::FileName qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(environment());
     QString qtInstallData = ProjectExplorer::DebuggingHelperLibrary::qtInstallDataDir(qmakePath);
     return ProjectExplorer::DebuggingHelperLibrary::debuggingHelperLibraryDirectories(qtInstallData);
 }
diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp
index 24aeb959082bb6a5e29af9c0d775e9f3999d3e54..2cc25bd8570ce5d02255bd3dcdbb8ee56c3ec100 100644
--- a/src/plugins/projectexplorer/gcctoolchain.cpp
+++ b/src/plugins/projectexplorer/gcctoolchain.cpp
@@ -398,17 +398,17 @@ QString GccToolChain::debuggerCommand() const
     return m_debuggerCommand;
 }
 
-QString GccToolChain::mkspec() const
+Utils::FileName GccToolChain::mkspec() const
 {
     Abi abi = targetAbi();
     if (abi.os() == Abi::MacOS) {
         QString v = version();
         // prefer versioned g++ on mac. This is required to enable building for older Mac OS versions
         if (v.startsWith(QLatin1String("4.0")))
-            return QLatin1String("macx-g++40");
+            return Utils::FileName::fromString("macx-g++40");
         if (v.startsWith(QLatin1String("4.2")))
-            return QLatin1String("macx-g++42");
-        return QLatin1String("macx-g++");
+            return Utils::FileName::fromString("macx-g++42");
+        return Utils::FileName::fromString("macx-g++");
     }
 
     QList<Abi> gccAbiList = Abi::abisOfBinary(m_compilerPath);
@@ -420,18 +420,18 @@ QString GccToolChain::mkspec() const
                 || gccAbi.os() != abi.os()
                 || gccAbi.osFlavor() != abi.osFlavor())) {
         // Note: This can fail:-(
-        return QString(); // this is a cross-compiler, leave the mkspec alone!
+        return Utils::FileName(); // this is a cross-compiler, leave the mkspec alone!
     }
     if (abi.os() == Abi::LinuxOS) {
         if (abi.osFlavor() != Abi::GenericLinuxFlavor)
-            return QString(); // most likely not a desktop, so leave the mkspec alone.
+            return Utils::FileName(); // most likely not a desktop, so leave the mkspec alone.
         if (abi.wordWidth() == gccAbi.wordWidth())
-            return QLatin1String("linux-g++"); // no need to explicitly set the word width
-        return QLatin1String("linux-g++-") + QString::number(m_targetAbi.wordWidth());
+            return Utils::FileName::fromString("linux-g++"); // no need to explicitly set the word width
+        return Utils::FileName::fromString("linux-g++-" + QString::number(m_targetAbi.wordWidth()));
     }
     if (abi.os() == Abi::BsdOS && abi.osFlavor() == Abi::FreeBsdFlavor)
-        return QLatin1String("freebsd-g++");
-    return QString();
+        return Utils::FileName::fromString("freebsd-g++");
+    return Utils::FileName();
 }
 
 QString GccToolChain::makeCommand() const
@@ -781,14 +781,14 @@ QString ClangToolChain::makeCommand() const
 #endif
 }
 
-QString ClangToolChain::mkspec() const
+Utils::FileName ClangToolChain::mkspec() const
 {
     Abi abi = targetAbi();
     if (abi.os() == Abi::MacOS)
-        return QLatin1String("unsupported/macx-clang");
+        return Utils::FileName::fromString("unsupported/macx-clang");
     else if (abi.os() == Abi::LinuxOS)
-        return QLatin1String("unsupported/linux-clang");
-    return QString(); // Note: Not supported by Qt yet, so default to the mkspec the Qt was build with
+        return Utils::FileName::fromString("unsupported/linux-clang");
+    return Utils::FileName(); // Note: Not supported by Qt yet, so default to the mkspec the Qt was build with
 }
 
 IOutputParser *ClangToolChain::outputParser() const
@@ -864,9 +864,9 @@ QString MingwToolChain::typeName() const
     return Internal::MingwToolChainFactory::tr("MinGW");
 }
 
-QString MingwToolChain::mkspec() const
+Utils::FileName MingwToolChain::mkspec() const
 {
-    return QLatin1String("win32-g++");
+    return Utils::FileName::fromString("win32-g++");
 }
 
 QString MingwToolChain::makeCommand() const
@@ -958,9 +958,9 @@ IOutputParser *LinuxIccToolChain::outputParser() const
     return new LinuxIccParser;
 }
 
-QString LinuxIccToolChain::mkspec() const
+Utils::FileName LinuxIccToolChain::mkspec() const
 {
-    return QLatin1String("linux-icc-") + QString::number(targetAbi().wordWidth());
+    return Utils::FileName::fromString("linux-icc-" + QString::number(targetAbi().wordWidth()));
 }
 
 ToolChain *LinuxIccToolChain::clone() const
diff --git a/src/plugins/projectexplorer/gcctoolchain.h b/src/plugins/projectexplorer/gcctoolchain.h
index e5d4eefbca144291b90199b1eb996674438e173a..8ab8111e5c2901795c97db6e1e62c844699b2e3f 100644
--- a/src/plugins/projectexplorer/gcctoolchain.h
+++ b/src/plugins/projectexplorer/gcctoolchain.h
@@ -65,7 +65,7 @@ public:
     QByteArray predefinedMacros() const;
     QList<HeaderPath> systemHeaderPaths() const;
     void addToEnvironment(Utils::Environment &env) const;
-    QString mkspec() const;
+    Utils::FileName mkspec() const;
     QString makeCommand() const;
     void setDebuggerCommand(const QString &);
     QString debuggerCommand() const;
@@ -122,7 +122,7 @@ class PROJECTEXPLORER_EXPORT ClangToolChain : public GccToolChain
 public:
     QString typeName() const;
     QString makeCommand() const;
-    QString mkspec() const;
+    Utils::FileName mkspec() const;
 
     IOutputParser *outputParser() const;
 
@@ -143,7 +143,7 @@ class PROJECTEXPLORER_EXPORT MingwToolChain : public GccToolChain
 {
 public:
     QString typeName() const;
-    QString mkspec() const;
+    Utils::FileName mkspec() const;
     QString makeCommand() const;
 
     ToolChain *clone() const;
@@ -167,7 +167,7 @@ public:
 
     IOutputParser *outputParser() const;
 
-    QString mkspec() const;
+    Utils::FileName mkspec() const;
 
     ToolChain *clone() const;
 
diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp
index d7577b6a061919b5be10a356b3b9f648c0069ddd..d8eb176ffd9254cf74b552afc9231de0025b00d5 100644
--- a/src/plugins/projectexplorer/msvctoolchain.cpp
+++ b/src/plugins/projectexplorer/msvctoolchain.cpp
@@ -324,15 +324,15 @@ QString MsvcToolChain::typeName() const
     return MsvcToolChainFactory::tr("MSVC");
 }
 
-QString MsvcToolChain::mkspec() const
+Utils::FileName MsvcToolChain::mkspec() const
 {
     if (m_abi.osFlavor() == Abi::WindowsMsvc2005Flavor)
-        return QLatin1String("win32-msvc2005");
+        return Utils::FileName::fromString(QLatin1String("win32-msvc2005"));
     if (m_abi.osFlavor() == Abi::WindowsMsvc2008Flavor)
-        return QLatin1String("win32-msvc2008");
+        return Utils::FileName::fromString(QLatin1String("win32-msvc2008"));
     if (m_abi.osFlavor() == Abi::WindowsMsvc2010Flavor)
-        return QLatin1String("win32-msvc2010");
-    return QString();
+        return Utils::FileName::fromString(QLatin1String("win32-msvc2010"));
+    return Utils::FileName();
 }
 
 QVariantMap MsvcToolChain::toMap() const
diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h
index fde8e1bb46c750a1f81d106642d650cfdb1da6e4..7fe4f01d2ea8b7a7622763df1542048d593ed0c2 100644
--- a/src/plugins/projectexplorer/msvctoolchain.h
+++ b/src/plugins/projectexplorer/msvctoolchain.h
@@ -60,8 +60,7 @@ public:
     static MsvcToolChain *readFromMap(const QVariantMap &data);
 
     QString typeName() const;
-
-    QString mkspec() const;
+    Utils::FileName mkspec() const;
 
     QVariantMap toMap() const;
     bool fromMap(const QVariantMap &data);
diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h
index f325ff6bd8f0f9fa808e323d61a115ac0737d00d..e9c5786e3a464ca90fbcb61e9c29aa79e030df7e 100644
--- a/src/plugins/projectexplorer/toolchain.h
+++ b/src/plugins/projectexplorer/toolchain.h
@@ -36,6 +36,8 @@
 #include "projectexplorer_export.h"
 #include "headerpath.h"
 
+#include <utils/fileutils.h>
+
 #include <QtCore/QObject>
 #include <QtCore/QString>
 #include <QtCore/QVariantMap>
@@ -83,7 +85,7 @@ public:
     virtual void addToEnvironment(Utils::Environment &env) const = 0;
     virtual QString makeCommand() const = 0;
 
-    virtual QString mkspec() const = 0;
+    virtual Utils::FileName mkspec() const = 0;
 
     virtual QString debuggerCommand() const = 0;
     virtual QString defaultMakeTarget() const;
diff --git a/src/plugins/projectexplorer/wincetoolchain.cpp b/src/plugins/projectexplorer/wincetoolchain.cpp
index 9e42b4aeaa72cf56fc4992df77d785a61a896c35..6210a2f352aca2b52152f88ce29fff8aa5fe8819 100644
--- a/src/plugins/projectexplorer/wincetoolchain.cpp
+++ b/src/plugins/projectexplorer/wincetoolchain.cpp
@@ -300,7 +300,7 @@ QString WinCEToolChain::typeName() const
     return WinCEToolChainFactory::tr("WinCE");
 }
 
-QString WinCEToolChain::mkspec() const
+Utils::FileName WinCEToolChain::mkspec() const
 {
     const QChar specSeperator('-');
 
@@ -312,7 +312,7 @@ QString WinCEToolChain::mkspec() const
     specString += specSeperator;
     specString += m_msvcVer;
 
-    return specString;
+    return Utils::FileName::fromString(specString);
 }
 
 
diff --git a/src/plugins/projectexplorer/wincetoolchain.h b/src/plugins/projectexplorer/wincetoolchain.h
index 431cfd30124d3a6f82a51461669391991638a55f..8a7097c2cfddd037dc4bd4f181888c963d79c41e 100644
--- a/src/plugins/projectexplorer/wincetoolchain.h
+++ b/src/plugins/projectexplorer/wincetoolchain.h
@@ -61,7 +61,7 @@ public:
 
     QString typeName() const;
 
-    QString mkspec() const;
+    Utils::FileName mkspec() const;
 
     QString ceVer() const;
 
diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp
index 34ad5319f4091af92679f3b899325419cfb49cad..f74bc02830e80a7c4f329acb2f510393d16c63ee 100644
--- a/src/plugins/qt4projectmanager/qmakestep.cpp
+++ b/src/plugins/qt4projectmanager/qmakestep.cpp
@@ -145,9 +145,9 @@ QString QMakeStep::allArguments(bool shorted)
             }
         }
     }
-    QString specArg = mkspec();
+    Utils::FileName specArg = mkspec();
     if (!userProvidedMkspec && !specArg.isEmpty())
-        arguments << "-spec" << specArg;
+        arguments << "-spec" << specArg.toUserOutput();
 
     // Find out what flags we pass on to qmake
     arguments << bc->configCommandLineArguments();
@@ -235,7 +235,7 @@ bool QMakeStep::init()
     else
         workingDirectory = qt4bc->buildDirectory();
 
-    QString program = qtVersion->qmakeCommand();
+    Utils::FileName program = qtVersion->qmakeCommand();
 
     QString makefile = workingDirectory;
 
@@ -255,7 +255,7 @@ bool QMakeStep::init()
     // Check whether we need to run qmake
     bool makefileOutDated = true;
     if (QFileInfo(makefile).exists()) {
-        QString qmakePath = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(makefile);
+        Utils::FileName qmakePath = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(makefile);
         if (qtVersion->qmakeCommand() == qmakePath) {
             makefileOutDated = !qt4bc->compareToImportFrom(makefile);
         }
@@ -269,7 +269,7 @@ bool QMakeStep::init()
     ProcessParameters *pp = processParameters();
     pp->setMacroExpander(qt4bc->macroExpander());
     pp->setWorkingDirectory(workingDirectory);
-    pp->setCommand(program);
+    pp->setCommand(program.toString());
     pp->setArguments(args);
     pp->setEnvironment(qt4bc->environment());
 
@@ -445,14 +445,14 @@ QString QMakeStep::userArguments()
     return m_userArgs;
 }
 
-QString QMakeStep::mkspec()
+Utils::FileName QMakeStep::mkspec()
 {
     Qt4BuildConfiguration *bc = qt4BuildConfiguration();
     QString additionalArguments = m_userArgs;
     for (Utils::QtcProcess::ArgIterator ait(&additionalArguments); ait.next(); ) {
         if (ait.value() == QLatin1String("-spec")) {
             if (ait.next())
-                return ait.value();
+                return Utils::FileName::fromUserInput(ait.value());
         }
     }
 
@@ -523,8 +523,8 @@ QMakeStepConfigWidget::QMakeStepConfigWidget(QMakeStep *step)
             this, SLOT(qtVersionChanged()));
     connect(step->qt4BuildConfiguration(), SIGNAL(qmakeBuildConfigurationChanged()),
             this, SLOT(qmakeBuildConfigChanged()));
-    connect(QtSupport::QtVersionManager::instance(), SIGNAL(dumpUpdatedFor(QString)),
-            this, SLOT(qtVersionsDumpUpdated(QString)));
+    connect(QtSupport::QtVersionManager::instance(), SIGNAL(dumpUpdatedFor(Utils::FileName)),
+            this, SLOT(qtVersionsDumpUpdated(Utils::FileName)));
 }
 
 QMakeStepConfigWidget::~QMakeStepConfigWidget()
@@ -554,7 +554,7 @@ void QMakeStepConfigWidget::qtVersionChanged()
     updateQmlDebuggingOption();
 }
 
-void QMakeStepConfigWidget::qtVersionsDumpUpdated(const QString &qmakeCommand)
+void QMakeStepConfigWidget::qtVersionsDumpUpdated(const Utils::FileName &qmakeCommand)
 {
     QtSupport::BaseQtVersion *version = m_step->qt4BuildConfiguration()->qtVersion();
     if (version && version->qmakeCommand() == qmakeCommand)
@@ -675,16 +675,16 @@ void QMakeStepConfigWidget::updateSummaryLabel()
     // We don't want the full path to the .pro file
     QString args = m_step->allArguments(true);
     // And we only use the .pro filename not the full path
-    QString program = QFileInfo(qtVersion->qmakeCommand()).fileName();
+    QString program = qtVersion->qmakeCommand().toFileInfo().fileName();
     setSummaryText(tr("<b>qmake:</b> %1 %2").arg(program, args));
 
     ToolChain *tc = qt4bc->toolChain();
     if (!tc)
         return;
 
-    QString tcSpec = tc->mkspec();
+    Utils::FileName tcSpec = tc->mkspec();
     if (!tcSpec.isEmpty() && tcSpec != m_step->mkspec())
-        setAdditionalSummaryText(tr("<b>Warning:</b> The tool chain suggested \"%1\" as mkspec.").arg(tcSpec));
+        setAdditionalSummaryText(tr("<b>Warning:</b> The tool chain suggested \"%1\" as mkspec.").arg(tcSpec.toUserOutput()));
     else
         setAdditionalSummaryText(QString());
 }
@@ -711,7 +711,7 @@ void QMakeStepConfigWidget::updateEffectiveQMakeCall()
     QtSupport::BaseQtVersion *qtVersion = qt4bc->qtVersion();
     QString program = tr("<No Qt version>");
     if (qtVersion)
-        program = QFileInfo(qtVersion->qmakeCommand()).fileName();
+        program = qtVersion->qmakeCommand().toFileInfo().fileName();
     m_ui->qmakeArgumentsEdit->setPlainText(program + QLatin1Char(' ') + m_step->allArguments());
 }
 
diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h
index 131d2d3ece14d7a7c8362e635ed8fd10b3ec4e0d..719f3fcf804c0d3be3f6fec1dcc9d1681fb38d91 100644
--- a/src/plugins/qt4projectmanager/qmakestep.h
+++ b/src/plugins/qt4projectmanager/qmakestep.h
@@ -34,6 +34,7 @@
 #define QMAKESTEP_H
 
 #include "qt4projectmanager_global.h"
+#include <utils/fileutils.h>
 #include <projectexplorer/abstractprocessstep.h>
 
 #include <QtCore/QStringList>
@@ -101,7 +102,7 @@ public:
     QStringList moreArgumentsAfter();
     QStringList parserArguments();
     QString userArguments();
-    QString mkspec();
+    Utils::FileName mkspec();
     void setUserArguments(const QString &arguments);
     bool linkQmlDebuggingLibrary() const;
     void setLinkQmlDebuggingLibrary(bool enable);
@@ -146,7 +147,7 @@ public:
 private slots:
     // slots for handling buildconfiguration/step signals
     void qtVersionChanged();
-    void qtVersionsDumpUpdated(const QString &qmakeCommand);
+    void qtVersionsDumpUpdated(const Utils::FileName &qmakeCommand);
     void qmakeBuildConfigChanged();
     void userArgumentsChanged();
     void linkQmlDebuggingLibraryChanged();
diff --git a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp
index b17b17d74fcb102d4b2c668f7d658c19516b8dfe..23518b1486650e3da1573987390a3ca38cb72c9a 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp
@@ -49,7 +49,7 @@ DesktopQtVersion::DesktopQtVersion()
 
 }
 
-DesktopQtVersion::DesktopQtVersion(const QString &path, bool isAutodetected, const QString &autodetectionSource)
+DesktopQtVersion::DesktopQtVersion(const Utils::FileName &path, bool isAutodetected, const QString &autodetectionSource)
     : BaseQtVersion(path, isAutodetected, autodetectionSource)
 {
 
diff --git a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.h b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.h
index 221fc6d74b5a20707ffbe6f2f8139c907b1ac238..3031f286a49e19f8e63b5bc9f619c8aca323c75d 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.h
+++ b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.h
@@ -43,7 +43,7 @@ class DesktopQtVersion : public QtSupport::BaseQtVersion
 {
 public:
     DesktopQtVersion();
-    DesktopQtVersion(const QString &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
+    DesktopQtVersion(const Utils::FileName &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
     ~DesktopQtVersion();
     DesktopQtVersion *clone() const;
 
diff --git a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.cpp
index b608f9798e4dddf02e2f95384b999a31d256ef51..0b886144a5bc17185984c5d71d5a0206cd443eaa 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.cpp
@@ -73,11 +73,11 @@ int DesktopQtVersionFactory::priority() const
     return 0;
 }
 
-QtSupport::BaseQtVersion *DesktopQtVersionFactory::create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected, const QString &autoDetectionSource)
+QtSupport::BaseQtVersion *DesktopQtVersionFactory::create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected, const QString &autoDetectionSource)
 {
     Q_UNUSED(evaluator);
     // we are the fallback :) so we don't care what kind of qt it is
-    QFileInfo fi(qmakePath);
+    QFileInfo fi = qmakePath.toFileInfo();
     if (fi.exists() && fi.isExecutable() && fi.isFile())
         return new DesktopQtVersion(qmakePath, isAutoDetected, autoDetectionSource);
     return 0;
diff --git a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.h b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.h
index 19faddd1f6a7a908b53377545a335e399d073ed4..f4881b7e12305d31527c1d05030705b93236973a 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.h
+++ b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversionfactory.h
@@ -48,7 +48,7 @@ public:
     virtual QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data);
 
     virtual int priority() const;
-    virtual QtSupport::BaseQtVersion *create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
+    virtual QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
 };
 
 } // Internal
diff --git a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.cpp b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.cpp
index 63f4b5e134ab9b7a0cf750e4e7db94a3114e081e..b6e5b44089a9724afca42432537af76f0f087897 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.cpp
@@ -49,7 +49,7 @@ SimulatorQtVersion::SimulatorQtVersion()
 
 }
 
-SimulatorQtVersion::SimulatorQtVersion(const QString &path, bool isAutodetected, const QString &autodetectionSource)
+SimulatorQtVersion::SimulatorQtVersion(const Utils::FileName &path, bool isAutodetected, const QString &autodetectionSource)
     : QtSupport::BaseQtVersion(path, isAutodetected, autodetectionSource)
 {
 
diff --git a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.h b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.h
index caa6b5a3c1da200cdc22fd287b857823e14ef8b4..1645345962ad622207799e2dd5602787cfea0b7c 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.h
+++ b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.h
@@ -43,7 +43,7 @@ class SimulatorQtVersion : public QtSupport::BaseQtVersion
 {
 public:
     SimulatorQtVersion();
-    SimulatorQtVersion(const QString &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
+    SimulatorQtVersion(const Utils::FileName &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
     ~SimulatorQtVersion();
     SimulatorQtVersion *clone() const;
 
diff --git a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.cpp
index 8e44cdcc693ac8c2e516bd973f5ed05015518c8e..6771cdee724ba5d980ce7732d8a80b40004657a5 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.cpp
@@ -73,9 +73,9 @@ int SimulatorQtVersionFactory::priority() const
     return 50;
 }
 
-QtSupport::BaseQtVersion *SimulatorQtVersionFactory::create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected, const QString &autoDetectionSource)
+QtSupport::BaseQtVersion *SimulatorQtVersionFactory::create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected, const QString &autoDetectionSource)
 {
-    QFileInfo fi(qmakePath);
+    QFileInfo fi = qmakePath.toFileInfo();
     if (!fi.exists() || !fi.isExecutable() || !fi.isFile())
         return 0;
     QStringList configValues = evaluator->values("CONFIG");
diff --git a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.h b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.h
index a5717ef3a198cc76ef4112e12615f707adbe6908..d9c0f50782c89bacde4fd6363b25daae5f53c9b7 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.h
+++ b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversionfactory.h
@@ -48,7 +48,7 @@ public:
     virtual QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data);
 
     virtual int priority() const;
-    virtual QtSupport::BaseQtVersion *create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
+    virtual QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
 };
 
 } // Internal
diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp
index 3775a74ada50c5295ff70ebcef0406ca17b1e25d..f7dc6d3adb2fbcc9ed4887bdde1a3d5591d0f07e 100644
--- a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp
@@ -128,9 +128,9 @@ QString GcceToolChain::makeCommand() const
 #endif
 }
 
-QString GcceToolChain::mkspec() const
+Utils::FileName GcceToolChain::mkspec() const
 {
-    return QString(); // always use default from Qt version
+    return Utils::FileName(); // always use default from Qt version
 }
 
 QString GcceToolChain::defaultMakeTarget() const
diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h
index 4b3c0b6e73da3b283341c8b54426e079e32f32ef..9ffdc5b436b8439bc66d735b72128461dc86c16e 100644
--- a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h
+++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h
@@ -50,7 +50,7 @@ public:
     QByteArray predefinedMacros() const;
     void addToEnvironment(Utils::Environment &env) const;
     QString makeCommand() const;
-    QString mkspec() const;
+    Utils::FileName mkspec() const;
     QString defaultMakeTarget() const;
 
     void setCompilerPath(const QString &);
diff --git a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp
index 70dd0e7de3ba3f6eb117caff0229256180da53cc..9ea44df2a9678c22a453bfd2c7ad41c0ffa7ff24 100644
--- a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp
@@ -225,9 +225,9 @@ void RvctToolChain::addToEnvironment(Utils::Environment &env) const
     env.set(QLatin1String("LANG"), QString(QLatin1Char('C')));
 }
 
-QString RvctToolChain::mkspec() const
+Utils::FileName RvctToolChain::mkspec() const
 {
-    return QString(); // Always use default from Qt version
+    return Utils::FileName(); // Always use default from Qt version
 }
 
 QString RvctToolChain::makeCommand() const
diff --git a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h
index 5b8927888012e0a54fcbe47299afb4cb693fc171..e6105e925763ba5f19d61509167a46a5dcec1985 100644
--- a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h
+++ b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h
@@ -89,7 +89,7 @@ public:
     QByteArray predefinedMacros() const;
     QList<ProjectExplorer::HeaderPath> systemHeaderPaths() const;
     void addToEnvironment(Utils::Environment &env) const;
-    QString mkspec() const;
+    Utils::FileName mkspec() const;
     QString makeCommand() const;
     QString defaultMakeTarget() const;
     ProjectExplorer::IOutputParser *outputParser() const;
diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.cpp b/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.cpp
index c93c3e50ee42ebf9c117c30aae34fa896f18521d..64393852e00943de41ce96613996b9d65307c2b3 100644
--- a/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.cpp
@@ -59,7 +59,7 @@ SymbianQtVersion::SymbianQtVersion()
 {
 }
 
-SymbianQtVersion::SymbianQtVersion(const QString &path, bool isAutodetected, const QString &autodetectionSource)
+SymbianQtVersion::SymbianQtVersion(const Utils::FileName &path, bool isAutodetected, const QString &autodetectionSource)
     : BaseQtVersion(path, isAutodetected, autodetectionSource),
       m_validSystemRoot(false)
 {
diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.h b/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.h
index d690d313d2b0d064cfdab4f6bc42bdffcbc8fc66..c405d3845d277415ff47dada4f66b35a411298a8 100644
--- a/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.h
+++ b/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.h
@@ -42,7 +42,7 @@ class SymbianQtVersion : public QtSupport::BaseQtVersion
 {
 public:
     SymbianQtVersion();
-    SymbianQtVersion(const QString &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
+    SymbianQtVersion(const Utils::FileName &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
     SymbianQtVersion *clone() const;
     ~SymbianQtVersion();
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.cpp b/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.cpp
index 167d60ec85b3d3f84234363a10f2544e2c22fa06..dc80380ee56b3038e995e31a03346dd1a6d1f653 100644
--- a/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.cpp
@@ -73,9 +73,9 @@ int SymbianQtVersionFactory::priority() const
     return 50;
 }
 
-QtSupport::BaseQtVersion *SymbianQtVersionFactory::create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected, const QString &autoDetectionSource)
+QtSupport::BaseQtVersion *SymbianQtVersionFactory::create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected, const QString &autoDetectionSource)
 {
-    QFileInfo fi(qmakePath);
+    QFileInfo fi = qmakePath.toFileInfo();
     if (!fi.exists() || !fi.isExecutable() || !fi.isFile())
         return 0;
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.h b/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.h
index d45b9e7b5dd17500265d3e2e932024a02dad88f8..62b459fceda260595de64290fad9a2942f55cd02 100644
--- a/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.h
+++ b/src/plugins/qt4projectmanager/qt-s60/symbianqtversionfactory.h
@@ -48,7 +48,7 @@ public:
     virtual QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data);
 
     virtual int priority() const;
-    virtual QtSupport::BaseQtVersion *create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
+    virtual QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
 };
 
 } // Internal
diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp
index 1f4b64610ab52c712503dcbd10dbdef44a1434b1..c317fcc92d2f4ea6fb2885acd94b80eb0957ee8f 100644
--- a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp
@@ -183,9 +183,9 @@ void WinscwToolChain::addToEnvironment(Utils::Environment &env) const
 }
 
 
-QString WinscwToolChain::mkspec() const
+Utils::FileName WinscwToolChain::mkspec() const
 {
-    return QString(); // Always use default from Qt version
+    return Utils::FileName(); // Always use default from Qt version
 }
 
 QString WinscwToolChain::makeCommand() const
diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h
index 83770ef97a125305bb5363d8d0a7a02b2d8ddef7..6003e96bbe3473c52d451a6ee740fedef8f3f105 100644
--- a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h
+++ b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h
@@ -60,7 +60,7 @@ public:
     QByteArray predefinedMacros() const;
     QList<ProjectExplorer::HeaderPath> systemHeaderPaths() const;
     void addToEnvironment(Utils::Environment &env) const;
-    QString mkspec() const;
+    Utils::FileName mkspec() const;
     QString makeCommand() const;
     virtual QString debuggerCommand() const;
     QString defaultMakeTarget() const;
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index 3aa0ce69a4650a7e670399320d15985d10b9ca79..f4699251d22cb7382db60335096679abe3dc446d 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -123,7 +123,7 @@ static inline QString msgBuildConfigNotApplicable(const QString &d, const QtSupp
                                                   const Target *target)
 {
     return QString::fromLatin1("Warning: Buildconfiguration '%1' : Qt '%2' from %3 not supported by target '%4'").
-            arg(d, qtVersion->displayName(), qtVersion->qmakeCommand(), target->id());
+            arg(d, qtVersion->displayName(), qtVersion->qmakeCommand().toUserOutput(), target->id());
 }
 
 bool Qt4BuildConfiguration::fromMap(const QVariantMap &map)
@@ -171,7 +171,7 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map)
     if (!toolChain()) {
         if (version && version->isValid()) {
             qWarning("Warning: No tool chain available for '%s' from %s used in '%s'.",
-                    qPrintable(version->displayName()), qPrintable(version->qmakeCommand()),
+                    qPrintable(version->displayName()), qPrintable(version->qmakeCommand().toUserOutput()),
                     qPrintable(target()->id()));
         } else {
             qWarning("Warning: No tool chain available for invalid Qt version used in '%s'.",
@@ -475,7 +475,7 @@ bool Qt4BuildConfiguration::compareToImportFrom(const QString &makefile)
 {
     QMakeStep *qs = qmakeStep();
     if (QFileInfo(makefile).exists() && qs) {
-        QString qmakePath = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(makefile);
+        Utils::FileName qmakePath = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(makefile);
         QtSupport::BaseQtVersion *version = qtVersion();
         if (!version)
             return false;
@@ -495,17 +495,17 @@ bool Qt4BuildConfiguration::compareToImportFrom(const QString &makefile)
                 // are not interested in), splitting them up into individual strings:
                 extractSpecFromArguments(&userArgs, workingDirectory, version, &actualArgs),
                 actualArgs = qs->moreArguments() + actualArgs + qs->moreArgumentsAfter();
-                QString actualSpec = qs->mkspec();
+                Utils::FileName actualSpec = qs->mkspec();
 
                 QString qmakeArgs = result.second;
                 QStringList parsedArgs;
-                QString parsedSpec = extractSpecFromArguments(&qmakeArgs, workingDirectory, version, &parsedArgs);
+                Utils::FileName parsedSpec = extractSpecFromArguments(&qmakeArgs, workingDirectory, version, &parsedArgs);
 
                 if (debug) {
                     qDebug()<<"Actual args:"<<actualArgs;
                     qDebug()<<"Parsed args:"<<parsedArgs;
-                    qDebug()<<"Actual spec:"<<actualSpec;
-                    qDebug()<<"Parsed spec:"<<parsedSpec;
+                    qDebug()<<"Actual spec:"<<actualSpec.toString();
+                    qDebug()<<"Parsed spec:"<<parsedSpec.toString();
                 }
 
                 // Comparing the sorted list is obviously wrong
@@ -530,15 +530,15 @@ bool Qt4BuildConfiguration::compareToImportFrom(const QString &makefile)
                         return true;
                     // Actual spec is the default one
 //                    qDebug()<<"AS vs VS"<<actualSpec<<version->mkspec();
-                    if ((actualSpec == version->mkspec() || actualSpec == "default")
-                        && (parsedSpec == version->mkspec() || parsedSpec == "default" || parsedSpec.isEmpty()))
+                    if ((actualSpec == version->mkspec() || actualSpec == Utils::FileName::fromString(QLatin1String("default")))
+                        && (parsedSpec == version->mkspec() || parsedSpec == Utils::FileName::fromString(QLatin1String("default")) || parsedSpec.isEmpty()))
                         return true;
                 }
             } else if (debug) {
                 qDebug()<<"different qmake buildconfigurations buildconfiguration:"<<qmakeBuildConfiguration()<<" Makefile:"<<result.first;
             }
         } else if (debug) {
-            qDebug()<<"diffrent qt versions, buildconfiguration:"<<version->qmakeCommand()<<" Makefile:"<<qmakePath;
+            qDebug()<<"diffrent qt versions, buildconfiguration:"<<version->qmakeCommand().toString()<<" Makefile:"<<qmakePath.toString();
         }
     }
     return false;
@@ -558,11 +558,11 @@ bool Qt4BuildConfiguration::removeQMLInspectorFromArguments(QString *args)
     return removedArgument;
 }
 
-QString Qt4BuildConfiguration::extractSpecFromArguments(QString *args,
-                                                        const QString &directory, const QtSupport::BaseQtVersion *version,
-                                                        QStringList *outArgs)
+Utils::FileName Qt4BuildConfiguration::extractSpecFromArguments(QString *args,
+                                                                const QString &directory, const QtSupport::BaseQtVersion *version,
+                                                                QStringList *outArgs)
 {
-    QString parsedSpec;
+    Utils::FileName parsedSpec;
 
     bool ignoreNext = false;
     bool nextIsSpec = false;
@@ -572,7 +572,7 @@ QString Qt4BuildConfiguration::extractSpecFromArguments(QString *args,
             ait.deleteArg();
         } else if (nextIsSpec) {
             nextIsSpec = false;
-            parsedSpec = QDir::cleanPath(ait.value());
+            parsedSpec = Utils::FileName::fromUserInput(ait.value());
             ait.deleteArg();
         } else if (ait.value() == QLatin1String("-spec") || ait.value() == QLatin1String("-platform")) {
             nextIsSpec = true;
@@ -592,49 +592,39 @@ QString Qt4BuildConfiguration::extractSpecFromArguments(QString *args,
     }
 
     if (parsedSpec.isEmpty())
-        return QString();
+        return Utils::FileName();
 
-    QString baseMkspecDir = version->versionInfo().value("QMAKE_MKSPECS");
+    Utils::FileName baseMkspecDir = Utils::FileName::fromUserInput(version->versionInfo().value("QMAKE_MKSPECS"));
     if (baseMkspecDir.isEmpty())
-        baseMkspecDir = version->versionInfo().value("QT_INSTALL_DATA") + "/mkspecs";
+        baseMkspecDir = Utils::FileName::fromUserInput(version->versionInfo().value("QT_INSTALL_DATA") + "/mkspecs");
 
-#ifdef Q_OS_WIN
-    baseMkspecDir = baseMkspecDir.toLower();
-    parsedSpec = parsedSpec.toLower();
-#endif
     // if the path is relative it can be
     // relative to the working directory (as found in the Makefiles)
     // or relatively to the mkspec directory
     // if it is the former we need to get the canonical form
     // for the other one we don't need to do anything
-    if (QFileInfo(parsedSpec).isRelative()) {
-        if(QFileInfo(directory + QLatin1Char('/') + parsedSpec).exists()) {
-            parsedSpec = QDir::cleanPath(directory + QLatin1Char('/') + parsedSpec);
-#ifdef Q_OS_WIN
-            parsedSpec = parsedSpec.toLower();
-#endif
+    if (parsedSpec.toFileInfo().isRelative()) {
+        if (QFileInfo(directory + QLatin1Char('/') + parsedSpec.toString()).exists()) {
+            parsedSpec = Utils::FileName::fromUserInput(directory + QLatin1Char('/') + parsedSpec.toString());
         } else {
-            parsedSpec = baseMkspecDir + QLatin1Char('/') + parsedSpec;
+            parsedSpec = Utils::FileName::fromUserInput(baseMkspecDir.toString() + QLatin1Char('/') + parsedSpec.toString());
         }
     }
 
-    QFileInfo f2(parsedSpec);
+    QFileInfo f2 = parsedSpec.toFileInfo();
     while (f2.isSymLink()) {
-        parsedSpec = f2.symLinkTarget();
-        f2.setFile(parsedSpec);
+        parsedSpec = Utils::FileName::fromString(f2.symLinkTarget());
+        f2.setFile(parsedSpec.toString());
     }
 
-    if (parsedSpec.startsWith(baseMkspecDir)) {
-        parsedSpec = parsedSpec.mid(baseMkspecDir.length() + 1);
+    if (parsedSpec.isChildOf(baseMkspecDir)) {
+        parsedSpec = parsedSpec.relativeChildPath(baseMkspecDir);
     } else {
-        QString sourceMkSpecPath = version->sourcePath() + "/mkspecs";
-        if (parsedSpec.startsWith(sourceMkSpecPath)) {
-            parsedSpec = parsedSpec.mid(sourceMkSpecPath.length() + 1);
+        Utils::FileName sourceMkSpecPath = Utils::FileName::fromString(version->sourcePath().toString() + "/mkspecs");
+        if (parsedSpec.isChildOf(sourceMkSpecPath)) {
+            parsedSpec = parsedSpec.relativeChildPath(sourceMkSpecPath);
         }
     }
-#ifdef Q_OS_WIN
-    parsedSpec = parsedSpec.toLower();
-#endif
     return parsedSpec;
 }
 
@@ -837,7 +827,7 @@ void Qt4BuildConfiguration::importFromBuildDirectory()
         else
             mkfile.append(makefile());
 
-        QString qmakePath = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(mkfile);
+        Utils::FileName qmakePath = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(mkfile);
         if (!qmakePath.isEmpty()) {
             QtSupport::QtVersionManager *vm = QtSupport::QtVersionManager::instance();
             QtSupport::BaseQtVersion *version = vm->qtVersionForQMakeBinary(qmakePath);
@@ -851,7 +841,7 @@ void Qt4BuildConfiguration::importFromBuildDirectory()
             QtSupport::BaseQtVersion::QmakeBuildConfigs qmakeBuildConfig = result.first;
 
             QString additionalArguments = result.second;
-            QString parsedSpec = Qt4BuildConfiguration::extractSpecFromArguments(&additionalArguments, directory, version);
+            Utils::FileName parsedSpec = Qt4BuildConfiguration::extractSpecFromArguments(&additionalArguments, directory, version);
             const bool enableQmlDebugger =
                     Qt4BuildConfiguration::removeQMLInspectorFromArguments(&additionalArguments);
 
@@ -861,8 +851,8 @@ void Qt4BuildConfiguration::importFromBuildDirectory()
             QMakeStep *qs = qmakeStep();
             qs->setUserArguments(additionalArguments);
             qs->setLinkQmlDebuggingLibrary(enableQmlDebugger);
-            if (!parsedSpec.isEmpty() && parsedSpec != QLatin1String("default") && qs->mkspec() != parsedSpec) {
-                Utils::QtcProcess::addArgs(&additionalArguments, (QStringList() << "-spec" << parsedSpec));
+            if (!parsedSpec.isEmpty() && parsedSpec != Utils::FileName::fromString(QLatin1String("default")) && qs->mkspec() != parsedSpec) {
+                Utils::QtcProcess::addArgs(&additionalArguments, (QStringList() << QLatin1String("-spec") << parsedSpec.toUserOutput()));
                 qs->setUserArguments(additionalArguments);
             }
 
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
index 1bb12488c77964b14fb8625647107be542fe5ef7..7631325c10b46d928d4f3f5fce570a0eb3e762d4 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
@@ -108,7 +108,7 @@ public:
 
     bool compareToImportFrom(const QString &makefile);
     static bool removeQMLInspectorFromArguments(QString *args);
-    static QString extractSpecFromArguments(QString *arguments,
+    static Utils::FileName extractSpecFromArguments(QString *arguments,
                                             const QString &directory, const QtSupport::BaseQtVersion *version,
                                             QStringList *outArgs = 0);
 
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index a99037840b7f2d3032b2dbd734a6ba88fed427c4..3959f77e2ffa63ec0a42f51065c4c4f4dcb0b4ea 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -559,7 +559,7 @@ void Qt4Project::updateCppCodeModel()
     if (rootQt4ProjectNode())
         allIncludePaths.append(rootQt4ProjectNode()->resolvedMkspecPath());
     else if (activeBC->qtVersion())
-        allIncludePaths.append(activeBC->qtVersion()->mkspecPath());
+        allIncludePaths.append(activeBC->qtVersion()->mkspecPath().toString());
 
     allIncludePaths.append(predefinedIncludePaths);
 
@@ -966,7 +966,7 @@ QtSupport::ProFileReader *Qt4Project::createProFileReader(Qt4ProFileNode *qt4Pro
             QStringList args;
             if (QMakeStep *qs = bc->qmakeStep()) {
                 args = qs->parserArguments();
-                m_proFileOption->qmakespec = qs->mkspec();
+                m_proFileOption->qmakespec = qs->mkspec().toString();
             } else {
                 args = bc->configCommandLineArguments();
             }
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index 9dafa8fe9068cbd16371220c97be9b07c22583bd..68be86bb38e08edd9348fc48e4f64c419fca62f3 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -357,7 +357,7 @@ void Qt4ProjectConfigWidget::updateImportLabel()
         else
             makefile.append(m_buildConfiguration->makefile());
 
-        QString qmakePath = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(makefile);
+        Utils::FileName qmakePath = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(makefile);
         QtSupport::BaseQtVersion *version = m_buildConfiguration->qtVersion();
         // check that there's a makefile
         if (!qmakePath.isEmpty()) {
@@ -367,7 +367,7 @@ void Qt4ProjectConfigWidget::updateImportLabel()
             if (mc == QtSupport::QtVersionManager::DifferentProject) {
                 incompatibleBuild = true;
             } else if (mc == QtSupport::QtVersionManager::SameProject) {
-                if (qmakePath != (version ? version->qmakeCommand() : QString())) {
+                if (qmakePath != (version ? version->qmakeCommand() : Utils::FileName())) {
                     // and that the qmake path is different from the current version
                     // import enable
                     visible = true;
diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp
index b903efe0b8cb041a63691079b9f962faa78c3d32..54ce90248006d4ab4876d7a727be396afc5f1355 100644
--- a/src/plugins/qt4projectmanager/qt4target.cpp
+++ b/src/plugins/qt4projectmanager/qt4target.cpp
@@ -303,21 +303,21 @@ ProjectExplorer::ToolChain *Qt4BaseTarget::preferredToolChain(ProjectExplorer::B
         return Target::preferredToolChain(bc);
 
     QList<ProjectExplorer::ToolChain *> tcs = possibleToolChains(bc);
-    const QString mkspec = qtBc->qtVersion()->mkspec();
+    const Utils::FileName mkspec = qtBc->qtVersion()->mkspec();
     foreach (ProjectExplorer::ToolChain *tc, tcs)
         if (tc->mkspec() == mkspec)
             return tc;
     return tcs.isEmpty() ? 0 : tcs.at(0);
 }
 
-QString Qt4BaseTarget::mkspec(const Qt4BuildConfiguration *bc) const
+Utils::FileName Qt4BaseTarget::mkspec(const Qt4BuildConfiguration *bc) const
 {
     QtSupport::BaseQtVersion *version = bc->qtVersion();
     // We do not know which abi the Qt version has, so let's stick with the defaults
     if (version && version->qtAbis().count() == 1 && version->qtAbis().first().isNull())
-        return QString();
+        return Utils::FileName();
 
-    const QString tcSpec = bc->toolChain() ? bc->toolChain()->mkspec() : QString();
+    const Utils::FileName tcSpec = bc->toolChain() ? bc->toolChain()->mkspec() : Utils::FileName();
     if (!version)
         return tcSpec;
     if (!tcSpec.isEmpty() && version->hasMkspec(tcSpec))
@@ -1185,7 +1185,7 @@ QList<BuildConfigurationInfo> BuildConfigurationInfo::checkForBuild(const QStrin
     QList<BuildConfigurationInfo> infos;
     foreach (const QString &file, makefiles) {
         QString makefile = directory + '/' + file;
-        QString qmakeBinary = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(makefile);
+        Utils::FileName qmakeBinary = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(makefile);
         if (qmakeBinary.isEmpty())
             continue;
         if (QtSupport::QtVersionManager::makefileIsFor(makefile, proFilePath) != QtSupport::QtVersionManager::SameProject)
@@ -1204,15 +1204,15 @@ QList<BuildConfigurationInfo> BuildConfigurationInfo::checkForBuild(const QStrin
                 QtSupport::QtVersionManager::scanMakeFile(makefile, version->defaultBuildConfig());
 
         QString additionalArguments = makefileBuildConfig.second;
-        QString parsedSpec = Qt4BuildConfiguration::extractSpecFromArguments(&additionalArguments, directory, version);
-        QString versionSpec = version->mkspec();
+        Utils::FileName parsedSpec = Qt4BuildConfiguration::extractSpecFromArguments(&additionalArguments, directory, version);
+        Utils::FileName versionSpec = version->mkspec();
 
         QString specArgument;
         // Compare mkspecs and add to additional arguments
-        if (parsedSpec.isEmpty() || parsedSpec == versionSpec || parsedSpec == "default") {
+        if (parsedSpec.isEmpty() || parsedSpec == versionSpec || parsedSpec == Utils::FileName::fromString("default")) {
             // using the default spec, don't modify additional arguments
         } else {
-            specArgument = "-spec " + Utils::QtcProcess::quoteArg(parsedSpec);
+            specArgument = "-spec " + Utils::QtcProcess::quoteArg(parsedSpec.toUserOutput());
         }
         Utils::QtcProcess::addArgs(&specArgument, additionalArguments);
 
diff --git a/src/plugins/qt4projectmanager/qt4target.h b/src/plugins/qt4projectmanager/qt4target.h
index daab9ad9761ca08d20bf93f8e20998f0a6545d38..64f2c604a99d969f231a8cb7fa77ea711bfe89fb 100644
--- a/src/plugins/qt4projectmanager/qt4target.h
+++ b/src/plugins/qt4projectmanager/qt4target.h
@@ -92,7 +92,7 @@ public:
     QList<ProjectExplorer::ToolChain *> possibleToolChains(ProjectExplorer::BuildConfiguration *bc) const;
     ProjectExplorer::ToolChain *preferredToolChain(ProjectExplorer::BuildConfiguration *) const;
 
-    virtual QString mkspec(const Qt4BuildConfiguration *bc) const;
+    virtual Utils::FileName mkspec(const Qt4BuildConfiguration *bc) const;
 
 signals:
     void buildDirectoryInitialized();
diff --git a/src/plugins/qt4projectmanager/winceqtversion.cpp b/src/plugins/qt4projectmanager/winceqtversion.cpp
index c86852f18256fcad67d137af74da0bb836eb2678..a18635f6beee28716a8d1023a73cf1e4982a304b 100644
--- a/src/plugins/qt4projectmanager/winceqtversion.cpp
+++ b/src/plugins/qt4projectmanager/winceqtversion.cpp
@@ -44,7 +44,7 @@ WinCeQtVersion::WinCeQtVersion()
 {
 }
 
-WinCeQtVersion::WinCeQtVersion(const QString &path, const QString &archType,
+WinCeQtVersion::WinCeQtVersion(const Utils::FileName &path, const QString &archType,
         bool isAutodetected, const QString &autodetectionSource)
   : QtSupport::BaseQtVersion(path, isAutodetected, autodetectionSource),
     m_archType(ProjectExplorer::Abi::ArmArchitecture)
@@ -104,7 +104,7 @@ void WinCeQtVersion::fromMap(const QVariantMap &map)
     // named <Description>-<Architecture>-<Compiler> with no other '-' characters.
     m_archType = ProjectExplorer::Abi::ArmArchitecture;
 
-    const QStringList splitSpec = mkspec().split("-");
+    const QStringList splitSpec = mkspec().toString().split("-");
     if (splitSpec.length() == 3) {
         const QString archString = splitSpec.value(1);
         if (archString.contains("x86", Qt::CaseInsensitive))
diff --git a/src/plugins/qt4projectmanager/winceqtversion.h b/src/plugins/qt4projectmanager/winceqtversion.h
index 60f37ff39a24cb2a38369ceb1698e37b871c3396..2b15528602952d391f5afeda63d199a188056474 100644
--- a/src/plugins/qt4projectmanager/winceqtversion.h
+++ b/src/plugins/qt4projectmanager/winceqtversion.h
@@ -42,7 +42,7 @@ class WinCeQtVersion : public QtSupport::BaseQtVersion
 {
 public:
     WinCeQtVersion();
-    WinCeQtVersion(const QString &path, const QString &archType,
+    WinCeQtVersion(const Utils::FileName &path, const QString &archType,
         bool isAutodetected = false, const QString &autodetectionSource = QString());
     ~WinCeQtVersion();
     WinCeQtVersion *clone() const;
diff --git a/src/plugins/qt4projectmanager/winceqtversionfactory.cpp b/src/plugins/qt4projectmanager/winceqtversionfactory.cpp
index 26a42fd5494e8c8c558787215646e14f71cd7163..e7fe956f15d15b71cf2bb7a0617e8c46826e3432 100644
--- a/src/plugins/qt4projectmanager/winceqtversionfactory.cpp
+++ b/src/plugins/qt4projectmanager/winceqtversionfactory.cpp
@@ -69,9 +69,9 @@ int WinCeQtVersionFactory::priority() const
     return 50;
 }
 
-QtSupport::BaseQtVersion *WinCeQtVersionFactory::create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected, const QString &autoDetectionSource)
+QtSupport::BaseQtVersion *WinCeQtVersionFactory::create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected, const QString &autoDetectionSource)
 {
-    QFileInfo fi(qmakePath);
+    QFileInfo fi = qmakePath.toFileInfo();
     if (!fi.exists() || !fi.isExecutable() || !fi.isFile())
         return 0;
 
diff --git a/src/plugins/qt4projectmanager/winceqtversionfactory.h b/src/plugins/qt4projectmanager/winceqtversionfactory.h
index f0a9ac3253b594cb2e212267bd8a56958c65e706..f290704dbba5f7a1167c067c75282899b0894226 100644
--- a/src/plugins/qt4projectmanager/winceqtversionfactory.h
+++ b/src/plugins/qt4projectmanager/winceqtversionfactory.h
@@ -49,8 +49,9 @@ public:
 
     virtual int priority() const;
 
-    virtual QtSupport::BaseQtVersion *create(const QString &qmakePath, ProFileEvaluator *evaluator,
-    bool isAutoDetected = false, const QString &autoDetectionSource = QString());
+    virtual QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator,
+                                             bool isAutoDetected = false, const QString &autoDetectionSource = QString());
+
 };
 
 } // Internal
diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp
index c56a92ac5dfb6af372d6f82097792cf9793c4b15..95415c243319217cbb1972f9723edbb62dbdc548 100644
--- a/src/plugins/qtsupport/baseqtversion.cpp
+++ b/src/plugins/qtsupport/baseqtversion.cpp
@@ -162,7 +162,7 @@ int BaseQtVersion::getUniqueId()
     return QtVersionManager::instance()->getUniqueId();
 }
 
-BaseQtVersion::BaseQtVersion(const QString &qmakeCommand, bool isAutodetected, const QString &autodetectionSource)
+BaseQtVersion::BaseQtVersion(const Utils::FileName &qmakeCommand, bool isAutodetected, const QString &autodetectionSource)
     : m_id(getUniqueId()),
       m_isAutodetected(isAutodetected),
       m_autodetectionSource(autodetectionSource),
@@ -202,17 +202,12 @@ BaseQtVersion::BaseQtVersion()
     m_hasDocumentation(false),
     m_qmakeIsExecutable(true)
 {
-    ctor(QString());
+    ctor(Utils::FileName());
 }
 
-void BaseQtVersion::ctor(const QString& qmakePath)
+void BaseQtVersion::ctor(const Utils::FileName &qmakePath)
 {
-    m_qmakeCommand = QDir::fromNativeSeparators(qmakePath);
-#ifdef Q_OS_WIN
-    m_qmakeCommand = m_qmakeCommand.toLower();
-#endif
-    if (m_qmakeCommand.startsWith('~'))
-        m_qmakeCommand.remove(0, 1).prepend(QDir::homePath());
+    m_qmakeCommand = qmakePath;
     m_designerCommand.clear();
     m_linguistCommand.clear();
     m_qmlviewerCommand.clear();
@@ -228,7 +223,7 @@ BaseQtVersion::~BaseQtVersion()
 {
 }
 
-QString BaseQtVersion::defaultDisplayName(const QString &versionString, const QString &qmakePath,
+QString BaseQtVersion::defaultDisplayName(const QString &versionString, const Utils::FileName &qmakePath,
                                           bool fromPath)
 {
     QString location;
@@ -237,7 +232,7 @@ QString BaseQtVersion::defaultDisplayName(const QString &versionString, const QS
     } else {
         // Deduce a description from '/foo/qt-folder/[qtbase]/bin/qmake' -> '/foo/qt-folder'.
         // '/usr' indicates System Qt 4.X on Linux.
-        QDir dir = QFileInfo(qmakePath).absoluteDir();
+        QDir dir = qmakePath.toFileInfo().absoluteDir();
         do {
             const QString dirName = dir.dirName();
             if (dirName == QLatin1String("usr")) { // System-installed Qt.
@@ -276,7 +271,10 @@ void BaseQtVersion::fromMap(const QVariantMap &map)
     m_isAutodetected = map.value(QLatin1String(QTVERSIONAUTODETECTED)).toBool();
     if (m_isAutodetected)
         m_autodetectionSource = map.value(QLatin1String(QTVERSIONAUTODETECTIONSOURCE)).toString();
-    ctor(map.value(QLatin1String(QTVERSIONQMAKEPATH)).toString());
+    QString string = map.value(QLatin1String(QTVERSIONQMAKEPATH)).toString();
+    if (string.startsWith('~'))
+        string.remove(0, 1).prepend(QDir::homePath());
+    ctor(Utils::FileName::fromUserInput(string));
 }
 
 QVariantMap BaseQtVersion::toMap() const
@@ -287,7 +285,7 @@ QVariantMap BaseQtVersion::toMap() const
     result.insert(QLatin1String(QTVERSIONAUTODETECTED), isAutodetected());
     if (isAutodetected())
         result.insert(QLatin1String(QTVERSIONAUTODETECTIONSOURCE), autodetectionSource());
-    result.insert(QLatin1String(QTVERSIONQMAKEPATH), qmakeCommand());
+    result.insert(QLatin1String(QTVERSIONQMAKEPATH), qmakeCommand().toString());
     return result;
 }
 
@@ -328,7 +326,7 @@ QString BaseQtVersion::warningReason() const
     return QString();
 }
 
-QString BaseQtVersion::qmakeCommand() const
+Utils::FileName BaseQtVersion::qmakeCommand() const
 {
     return m_qmakeCommand;
 }
@@ -411,11 +409,11 @@ QString BaseQtVersion::toHtml(bool verbose) const
             prefix = QLatin1String("<tr><td></td>");
         }
         str << "<tr><td><b>" << QCoreApplication::translate("BaseQtVersion", "Source:")
-            << "</b></td><td>" << sourcePath() << "</td></tr>";
+            << "</b></td><td>" << sourcePath().toUserOutput() << "</td></tr>";
         str << "<tr><td><b>" << QCoreApplication::translate("BaseQtVersion", "mkspec:")
-            << "</b></td><td>" << mkspec() << "</td></tr>";
+            << "</b></td><td>" << mkspec().toUserOutput() << "</td></tr>";
         str << "<tr><td><b>" << QCoreApplication::translate("BaseQtVersion", "qmake:")
-            << "</b></td><td>" << m_qmakeCommand << "</td></tr>";
+            << "</b></td><td>" << m_qmakeCommand.toUserOutput() << "</td></tr>";
         ensureMkSpecParsed();
         if (!mkspecPath().isEmpty()) {
             if (m_defaultConfigIsDebug || m_defaultConfigIsDebugAndRelease) {
@@ -447,7 +445,7 @@ void BaseQtVersion::updateSourcePath() const
         return;
     updateVersionInfo();
     const QString installData = m_versionInfo["QT_INSTALL_DATA"];
-    m_sourcePath = installData;
+    QString sourcePath = installData;
     QFile qmakeCache(installData + QLatin1String("/.qmake.cache"));
     if (qmakeCache.exists()) {
         qmakeCache.open(QIODevice::ReadOnly | QIODevice::Text);
@@ -455,22 +453,19 @@ void BaseQtVersion::updateSourcePath() const
         while (!stream.atEnd()) {
             QString line = stream.readLine().trimmed();
             if (line.startsWith(QLatin1String("QT_SOURCE_TREE"))) {
-                m_sourcePath = line.split(QLatin1Char('=')).at(1).trimmed();
-                if (m_sourcePath.startsWith(QLatin1String("$$quote("))) {
-                    m_sourcePath.remove(0, 8);
-                    m_sourcePath.chop(1);
+                sourcePath = line.split(QLatin1Char('=')).at(1).trimmed();
+                if (sourcePath.startsWith(QLatin1String("$$quote("))) {
+                    sourcePath.remove(0, 8);
+                    sourcePath.chop(1);
                 }
                 break;
             }
         }
     }
-    m_sourcePath = QDir::cleanPath(m_sourcePath);
-#ifdef Q_OS_WIN
-    m_sourcePath = m_sourcePath.toLower();
-#endif
+    m_sourcePath = Utils::FileName::fromUserInput(sourcePath);
 }
 
-QString BaseQtVersion::sourcePath() const
+Utils::FileName BaseQtVersion::sourcePath() const
 {
     updateSourcePath();
     return m_sourcePath;
@@ -616,21 +611,17 @@ void BaseQtVersion::updateMkspec() const
     if (m_mkspecFullPath.isEmpty())
         return;
 
-    QString baseMkspecDir = versionInfo().value("QMAKE_MKSPECS");
+    Utils::FileName baseMkspecDir = Utils::FileName::fromUserInput(versionInfo().value("QMAKE_MKSPECS"));
     if (baseMkspecDir.isEmpty())
-        baseMkspecDir = versionInfo().value("QT_INSTALL_DATA") + "/mkspecs";
-
-#ifdef Q_OS_WIN
-    baseMkspecDir = baseMkspecDir.toLower();
-#endif
+        baseMkspecDir = Utils::FileName::fromUserInput(versionInfo().value("QT_INSTALL_DATA") + "/mkspecs");
 
-    if (m_mkspec.startsWith(baseMkspecDir)) {
-        m_mkspec = m_mkspec.mid(baseMkspecDir.length() + 1);
+    if (m_mkspec.isChildOf(baseMkspecDir)) {
+        m_mkspec = m_mkspec.relativeChildPath(baseMkspecDir);
 //        qDebug() << "Setting mkspec to"<<mkspec;
     } else {
-        QString sourceMkSpecPath = sourcePath() + "/mkspecs";
-        if (m_mkspec.startsWith(sourceMkSpecPath)) {
-            m_mkspec = m_mkspec.mid(sourceMkSpecPath.length() + 1);
+        Utils::FileName sourceMkSpecPath = sourcePath().appendPath("mkspecs");
+        if (m_mkspec.isChildOf(sourceMkSpecPath)) {
+            m_mkspec = m_mkspec.relativeChildPath(sourceMkSpecPath);
         } else {
             // Do nothing
         }
@@ -652,7 +643,7 @@ void BaseQtVersion::ensureMkSpecParsed() const
     ProFileCacheManager::instance()->incRefCount();
     ProFileParser parser(ProFileCacheManager::instance()->cache(), &msgHandler);
     ProFileEvaluator evaluator(&option, &parser, &msgHandler);
-    if (ProFile *pro = parser.parsedProFile(mkspecPath() + "/qmake.conf")) {
+    if (ProFile *pro = parser.parsedProFile(mkspecPath().toString() + "/qmake.conf")) {
         evaluator.setCumulative(false);
         evaluator.accept(pro, ProFileEvaluator::LoadProOnly);
         pro->deref();
@@ -680,26 +671,26 @@ void BaseQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const
     m_mkspecValues.insert("QT.declarative.bins", evaluator->value("QT.declarative.bins"));
 }
 
-QString BaseQtVersion::mkspec() const
+Utils::FileName BaseQtVersion::mkspec() const
 {
     updateMkspec();
     return m_mkspec;
 }
 
-QString BaseQtVersion::mkspecPath() const
+Utils::FileName BaseQtVersion::mkspecPath() const
 {
     updateMkspec();
     return m_mkspecFullPath;
 }
 
-bool BaseQtVersion::hasMkspec(const QString &spec) const
+bool BaseQtVersion::hasMkspec(const Utils::FileName &spec) const
 {
     updateVersionInfo();
     QFileInfo fi;
-    fi.setFile(QDir::fromNativeSeparators(m_versionInfo.value("QMAKE_MKSPECS")) + '/' + spec);
+    fi.setFile(QDir::fromNativeSeparators(m_versionInfo.value("QMAKE_MKSPECS")) + '/' + spec.toString());
     if (fi.isDir())
         return true;
-    fi.setFile(sourcePath() + QLatin1String("/mkspecs/") + spec);
+    fi.setFile(sourcePath().toString() + QLatin1String("/mkspecs/") + spec.toString());
     return fi.isDir();
 }
 
@@ -721,11 +712,11 @@ QString BaseQtVersion::qtVersionString() const
         return m_qtVersionString;
     m_qtVersionString.clear();
     if (m_qmakeIsExecutable) {
-        const QString qmake = QFileInfo(qmakeCommand()).absoluteFilePath();
+        const QString qmake = qmakeCommand().toString();
         m_qtVersionString =
             ProjectExplorer::DebuggingHelperLibrary::qtVersionForQMake(qmake, &m_qmakeIsExecutable);
     } else {
-        qWarning("Cannot determine the Qt version: %s cannot be run.", qPrintable(qmakeCommand()));
+        qWarning("Cannot determine the Qt version: %s cannot be run.", qPrintable(qmakeCommand().toString()));
     }
     return m_qtVersionString;
 }
@@ -741,7 +732,7 @@ void BaseQtVersion::updateVersionInfo() const
         return;
     if (!m_qmakeIsExecutable) {
         qWarning("Cannot update Qt version information: %s cannot be run.",
-                 qPrintable(qmakeCommand()));
+                 qPrintable(qmakeCommand().toString()));
         return;
     }
 
@@ -860,7 +851,7 @@ QString BaseQtVersion::examplesPath() const
 QList<ProjectExplorer::HeaderPath> BaseQtVersion::systemHeaderPathes() const
 {
     QList<ProjectExplorer::HeaderPath> result;
-    result.append(ProjectExplorer::HeaderPath(mkspecPath(), ProjectExplorer::HeaderPath::GlobalHeaderPath));
+    result.append(ProjectExplorer::HeaderPath(mkspecPath().toString(), ProjectExplorer::HeaderPath::GlobalHeaderPath));
     return result;
 }
 
@@ -992,12 +983,12 @@ QList<ProjectExplorer::Task> BaseQtVersion::reportIssuesImpl(const QString &proF
                                              QLatin1String(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)));
     }
 
-    QFileInfo qmakeInfo(qmakeCommand());
+    QFileInfo qmakeInfo = qmakeCommand().toFileInfo();
     if (!qmakeInfo.exists() ||
         !qmakeInfo.isExecutable()) {
         //: %1: Path to qmake executable
         const QString msg = QCoreApplication::translate("Qt4ProjectManager::QtVersion",
-                                                        "The qmake command \"%1\" was not found or is not executable.").arg(qmakeCommand());
+                                                        "The qmake command \"%1\" was not found or is not executable.").arg(qmakeCommand().toUserOutput());
         results.append(ProjectExplorer::Task(ProjectExplorer::Task::Error, msg, QString(), -1,
                                              QLatin1String(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)));
     }
@@ -1039,17 +1030,17 @@ QtConfigWidget *BaseQtVersion::createConfigurationWidget() const
     return 0;
 }
 
-bool BaseQtVersion::queryQMakeVariables(const QString &binary, QHash<QString, QString> *versionInfo)
+bool BaseQtVersion::queryQMakeVariables(const Utils::FileName &binary, QHash<QString, QString> *versionInfo)
 {
     bool qmakeIsExecutable;
     return BaseQtVersion::queryQMakeVariables(binary, versionInfo, &qmakeIsExecutable);
 }
 
-bool BaseQtVersion::queryQMakeVariables(const QString &binary, QHash<QString, QString> *versionInfo,
+bool BaseQtVersion::queryQMakeVariables(const Utils::FileName &binary, QHash<QString, QString> *versionInfo,
                                         bool *qmakeIsExecutable)
 {
     const int timeOutMS = 30000; // Might be slow on some machines.
-    const QFileInfo qmake(binary);
+    const QFileInfo qmake = binary.toFileInfo();
     *qmakeIsExecutable = qmake.exists() && qmake.isExecutable() && !qmake.isDir();
     if (!*qmakeIsExecutable)
         return false;
@@ -1077,17 +1068,17 @@ bool BaseQtVersion::queryQMakeVariables(const QString &binary, QHash<QString, QS
     process.start(qmake.absoluteFilePath(), args, QIODevice::ReadOnly);
     if (!process.waitForStarted()) {
         *qmakeIsExecutable = false;
-        qWarning("Cannot start '%s': %s", qPrintable(binary), qPrintable(process.errorString()));
+        qWarning("Cannot start '%s': %s", qPrintable(binary.toUserOutput()), qPrintable(process.errorString()));
         return false;
     }
     if (!process.waitForFinished(timeOutMS)) {
         Utils::SynchronousProcess::stopProcess(process);
-        qWarning("Timeout running '%s' (%dms).", qPrintable(binary), timeOutMS);
+        qWarning("Timeout running '%s' (%dms).", qPrintable(binary.toUserOutput()), timeOutMS);
         return false;
     }
     if (process.exitStatus() != QProcess::NormalExit) {
         *qmakeIsExecutable = false;
-        qWarning("'%s' crashed.", qPrintable(binary));
+        qWarning("'%s' crashed.", qPrintable(binary.toUserOutput()));
         return false;
     }
     QByteArray output = process.readAllStandardOutput();
@@ -1104,24 +1095,20 @@ bool BaseQtVersion::queryQMakeVariables(const QString &binary, QHash<QString, QS
     return true;
 }
 
-QString BaseQtVersion::mkspecFromVersionInfo(const QHash<QString, QString> &versionInfo)
+Utils::FileName BaseQtVersion::mkspecFromVersionInfo(const QHash<QString, QString> &versionInfo)
 {
-    QString baseMkspecDir = versionInfo.value("QMAKE_MKSPECS");
+    Utils::FileName baseMkspecDir = Utils::FileName::fromUserInput(versionInfo.value("QMAKE_MKSPECS"));
     if (baseMkspecDir.isEmpty())
-        baseMkspecDir = versionInfo.value("QT_INSTALL_DATA") + "/mkspecs";
+        baseMkspecDir = Utils::FileName::fromUserInput(versionInfo.value("QT_INSTALL_DATA") + "/mkspecs");
     if (baseMkspecDir.isEmpty())
-        return QString();
-
-#ifdef Q_OS_WIN
-    baseMkspecDir = baseMkspecDir.toLower();
-#endif
+        return Utils::FileName();
 
-    QString mkspecFullPath = baseMkspecDir + "/default";
+    Utils::FileName mkspecFullPath = Utils::FileName::fromString(baseMkspecDir.toString() + "/default");
 
     // qDebug() << "default mkspec is located at" << mkspecFullPath;
 
 #ifdef Q_OS_WIN
-    QFile f2(mkspecFullPath + "/qmake.conf");
+    QFile f2(mkspecFullPath.toString() + "/qmake.conf");
     if (f2.exists() && f2.open(QIODevice::ReadOnly)) {
         while (!f2.atEnd()) {
             QByteArray line = f2.readLine();
@@ -1132,7 +1119,7 @@ QString BaseQtVersion::mkspecFromVersionInfo(const QHash<QString, QString> &vers
                     // We sometimes get a mix of different slash styles here...
                     possibleFullPath = possibleFullPath.replace('\\', '/');
                     if (QFileInfo(possibleFullPath).exists()) // Only if the path exists
-                        mkspecFullPath = possibleFullPath;
+                        mkspecFullPath = Utils::FileName::fromUserInput(possibleFullPath);
                 }
                 break;
             }
@@ -1140,7 +1127,7 @@ QString BaseQtVersion::mkspecFromVersionInfo(const QHash<QString, QString> &vers
         f2.close();
     }
 #elif defined(Q_OS_MAC)
-    QFile f2(mkspecFullPath + "/qmake.conf");
+    QFile f2(mkspecFullPath.toString() + "/qmake.conf");
     if (f2.exists() && f2.open(QIODevice::ReadOnly)) {
         while (!f2.atEnd()) {
             QByteArray line = f2.readLine();
@@ -1151,10 +1138,10 @@ QString BaseQtVersion::mkspecFromVersionInfo(const QHash<QString, QString> &vers
                     if (value.contains("XCODE")) {
                         // we don't want to generate xcode projects...
 //                      qDebug() << "default mkspec is xcode, falling back to g++";
-                        mkspecFullPath = baseMkspecDir + "/macx-g++";
+                        mkspecFullPath = baseMkspecDir.appendPath("macx-g++");
                     }
                     //resolve mkspec link
-                    mkspecFullPath = QFileInfo(mkspecFullPath).canonicalFilePath();
+                    mkspecFullPath = Utils::FileName::fromString(mkspecFullPath.toFileInfo().canonicalFilePath());
                 }
                 break;
             }
@@ -1162,12 +1149,9 @@ QString BaseQtVersion::mkspecFromVersionInfo(const QHash<QString, QString> &vers
         f2.close();
     }
 #else
-    mkspecFullPath = QFileInfo(mkspecFullPath).canonicalFilePath();
+    mkspecFullPath = Utils::FileName::fromString(mkspecFullPath.toFileInfo().canonicalFilePath());
 #endif
 
-#ifdef Q_OS_WIN
-    mkspecFullPath = mkspecFullPath.toLower();
-#endif
     return mkspecFullPath;
 }
 
diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h
index 7f2f95647f9bf644222afca90e8a5cec70e5d3a3..d6658115241d94aed8ae9f690ecee5f9cee3d02c 100644
--- a/src/plugins/qtsupport/baseqtversion.h
+++ b/src/plugins/qtsupport/baseqtversion.h
@@ -35,6 +35,8 @@
 
 #include "qtsupport_global.h"
 
+#include <utils/fileutils.h>
+
 #include <projectexplorer/abi.h>
 #include <projectexplorer/headerpath.h>
 #include <projectexplorer/task.h>
@@ -132,7 +134,7 @@ public:
     virtual QHash<QString,QString> versionInfo() const;
     virtual void addToEnvironment(Utils::Environment &env) const;
 
-    virtual QString sourcePath() const;
+    virtual Utils::FileName sourcePath() const;
     // used by QtUiCodeModelSupport
     virtual QString uicCommand() const;
     virtual QString designerCommand() const;
@@ -155,16 +157,16 @@ public:
     virtual QString frameworkInstallPath() const;
 
     // former local functions
-    QString qmakeCommand() const;
+    Utils::FileName qmakeCommand() const;
     virtual QString systemRoot() const;
 
     /// @returns the name of the mkspec
-    QString mkspec() const;
+    Utils::FileName mkspec() const;
     /// @returns the full path to the default directory
     /// specifally not the directory the symlink/ORIGINAL_QMAKESPEC points to
-    QString mkspecPath() const;
+    Utils::FileName mkspecPath() const;
 
-    bool hasMkspec(const QString &) const;
+    bool hasMkspec(const Utils::FileName &spec) const;
 
     enum QmakeBuildConfig
     {
@@ -186,9 +188,9 @@ public:
 
     virtual ProjectExplorer::IOutputParser *createOutputParser() const;
 
-    static bool queryQMakeVariables(const QString &binary, QHash<QString, QString> *versionInfo);
-    static bool queryQMakeVariables(const QString &binary, QHash<QString, QString> *versionInfo, bool *qmakeIsExecutable);
-    static QString mkspecFromVersionInfo(const QHash<QString, QString> &versionInfo);
+    static bool queryQMakeVariables(const Utils::FileName &binary, QHash<QString, QString> *versionInfo);
+    static bool queryQMakeVariables(const Utils::FileName &binary, QHash<QString, QString> *versionInfo, bool *qmakeIsExecutable);
+    static Utils::FileName mkspecFromVersionInfo(const QHash<QString, QString> &versionInfo);
 
 
     virtual bool supportsBinaryDebuggingHelper() const;
@@ -208,12 +210,12 @@ public:
     virtual QtConfigWidget *createConfigurationWidget() const;
 
     static QString defaultDisplayName(const QString &versionString,
-                                      const QString &qmakePath,
+                                      const Utils::FileName &qmakePath,
                                       bool fromPath = false);
 
 protected:
     BaseQtVersion();
-    BaseQtVersion(const QString &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
+    BaseQtVersion(const Utils::FileName &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
 
     virtual QList<ProjectExplorer::Task> reportIssuesImpl(const QString &proFile, const QString &buildDir);
 
@@ -226,7 +228,7 @@ protected:
 private:
     void setAutoDetectionSource(const QString &autodetectionSource);
     static int getUniqueId();
-    void ctor(const QString &qmakePath);
+    void ctor(const Utils::FileName &qmakePath);
     void updateSourcePath() const;
     void updateVersionInfo() const;
     enum Binaries { QmlViewer, Designer, Linguist, Uic };
@@ -239,15 +241,15 @@ private:
     bool m_isAutodetected;
     QString m_autodetectionSource;
 
-    mutable QString m_sourcePath;
+    mutable Utils::FileName m_sourcePath;
     mutable bool m_hasDebuggingHelper; // controlled by m_versionInfoUpToDate
     mutable bool m_hasQmlDump;         // controlled by m_versionInfoUpToDate
     mutable bool m_hasQmlDebuggingLibrary; // controlled by m_versionInfoUpdate
     mutable bool m_hasQmlObserver;     // controlled by m_versionInfoUpToDate
 
     mutable bool m_mkspecUpToDate;
-    mutable QString m_mkspec;
-    mutable QString m_mkspecFullPath;
+    mutable Utils::FileName m_mkspec;
+    mutable Utils::FileName m_mkspecFullPath;
 
     mutable bool m_mkspecReadUpToDate;
     mutable bool m_defaultConfigIsDebug;
@@ -261,7 +263,7 @@ private:
     mutable bool m_hasDemos;
     mutable bool m_hasDocumentation;
 
-    mutable QString m_qmakeCommand;
+    mutable Utils::FileName m_qmakeCommand;
     mutable QString m_qtVersionString;
     mutable QString m_uicCommand;
     mutable QString m_designerCommand;
diff --git a/src/plugins/qtsupport/debugginghelperbuildtask.cpp b/src/plugins/qtsupport/debugginghelperbuildtask.cpp
index ba016468aaff2eeec8d86f96144a97fec4ebab02..4353f84db2147163338aebcfe1e3ddd0beddc40b 100644
--- a/src/plugins/qtsupport/debugginghelperbuildtask.cpp
+++ b/src/plugins/qtsupport/debugginghelperbuildtask.cpp
@@ -111,8 +111,8 @@ DebuggingHelperBuildTask::DebuggingHelperBuildTask(const BaseQtVersion *version,
     m_mkspec = version->mkspec();
 
     // Make sure QtVersion cache is invalidated
-    connect(this, SIGNAL(updateQtVersions(QString)),
-            QtVersionManager::instance(), SLOT(updateDumpFor(QString)),
+    connect(this, SIGNAL(updateQtVersions(Utils::FileName)),
+            QtVersionManager::instance(), SLOT(updateDumpFor(Utils::FileName)),
             Qt::QueuedConnection);
 }
 
diff --git a/src/plugins/qtsupport/debugginghelperbuildtask.h b/src/plugins/qtsupport/debugginghelperbuildtask.h
index ee24a659c9999e977a2e7f6e550eefbd0e3fde7b..a37838194bd67f4b94addc87e2c5bc2039070828 100644
--- a/src/plugins/qtsupport/debugginghelperbuildtask.h
+++ b/src/plugins/qtsupport/debugginghelperbuildtask.h
@@ -35,6 +35,7 @@
 
 #include "qtsupport_global.h"
 #include <utils/environment.h>
+#include <utils/fileutils.h>
 #include <projectexplorer/toolchain.h>
 
 #include <QtCore/QObject>
@@ -77,7 +78,7 @@ signals:
 
     // used internally
     void logOutput(const QString &output, bool bringToForeground);
-    void updateQtVersions(const QString &qmakeCommand);
+    void updateQtVersions(const Utils::FileName &qmakeCommand);
 
 private:
     bool buildDebuggingHelper(QFutureInterface<void> &future);
@@ -88,10 +89,10 @@ private:
     int m_qtId;
     QString m_qtInstallData;
     QString m_target;
-    QString m_qmakeCommand;
+    Utils::FileName m_qmakeCommand;
     QString m_makeCommand;
     QStringList m_makeArguments;
-    QString m_mkspec;
+    Utils::FileName m_mkspec;
     Utils::Environment m_environment;
     QString m_log;
     bool m_invalidQt;
diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp
index c6c42e165e71f03e5eb92ae486bb17ed30c02c27..410ce93edf79395110951e3d29fe69b71cd12f4a 100644
--- a/src/plugins/qtsupport/qtoptionspage.cpp
+++ b/src/plugins/qtsupport/qtoptionspage.cpp
@@ -174,7 +174,7 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList<BaseQtVersion *>
         BaseQtVersion *version = m_versions.at(i);
         QTreeWidgetItem *item = new QTreeWidgetItem(version->isAutodetected()? autoItem : manualItem);
         item->setText(0, version->displayName());
-        item->setText(1, QDir::toNativeSeparators(version->qmakeCommand()));
+        item->setText(1, version->qmakeCommand().toUserOutput());
         item->setData(0, VersionIdRole, version->uniqueId());
         item->setData(0, ToolChainIdRole, defaultToolChainId(version));
         const ValidityInfo info = validInformation(version);
@@ -216,8 +216,8 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList<BaseQtVersion *>
     userChangedCurrentVersion();
     updateCleanUpButton();
 
-    connect(QtVersionManager::instance(), SIGNAL(dumpUpdatedFor(QString)),
-            this, SLOT(qtVersionsDumpUpdated(QString)));
+    connect(QtVersionManager::instance(), SIGNAL(dumpUpdatedFor(Utils::FileName)),
+            this, SLOT(qtVersionsDumpUpdated(Utils::FileName)));
 
     connect(ProjectExplorer::ToolChainManager::instance(), SIGNAL(toolChainsChanged()),
             this, SLOT(toolChainsUpdated()));
@@ -359,7 +359,7 @@ void QtOptionsPageWidget::selectedToolChainChanged(int comboIndex)
     item->setData(0, ToolChainIdRole, toolChainId);
 }
 
-void QtOptionsPageWidget::qtVersionsDumpUpdated(const QString &qmakeCommand)
+void QtOptionsPageWidget::qtVersionsDumpUpdated(const Utils::FileName &qmakeCommand)
 {
     foreach (BaseQtVersion *version, m_versions) {
         if (version->qmakeCommand() == qmakeCommand)
@@ -592,9 +592,11 @@ static QString filterForQmakeFileDialog()
 
 void QtOptionsPageWidget::addQtDir()
 {
-    QString qtVersion = QFileDialog::getOpenFileName(this,
-                                                     tr("Select a qmake executable"),
-                                                     QString(), filterForQmakeFileDialog());
+    Utils::FileName qtVersion = Utils::FileName::fromString(
+                QFileDialog::getOpenFileName(this,
+                                             tr("Select a qmake executable"),
+                                             QString(),
+                                             filterForQmakeFileDialog()));
     if (qtVersion.isNull())
         return;
     if (QtVersionManager::instance()->qtVersionForQMakeBinary(qtVersion)) {
@@ -607,7 +609,7 @@ void QtOptionsPageWidget::addQtDir()
 
         QTreeWidgetItem *item = new QTreeWidgetItem(m_ui->qtdirList->topLevelItem(1));
         item->setText(0, version->displayName());
-        item->setText(1, QDir::toNativeSeparators(version->qmakeCommand()));
+        item->setText(1, version->qmakeCommand().toUserOutput());
         item->setData(0, VersionIdRole, version->uniqueId());
         item->setData(0, ToolChainIdRole, defaultToolChainId(version));
         item->setIcon(0, version->isValid()? m_validVersionIcon : m_invalidVersionIcon);
@@ -636,10 +638,11 @@ void QtOptionsPageWidget::removeQtDir()
 void QtOptionsPageWidget::editPath()
 {
     BaseQtVersion *current = currentVersion();
-    QString dir = QFileInfo(currentVersion()->qmakeCommand()).absolutePath();
-    QString qtVersion = QFileDialog::getOpenFileName(this,
-                                                     tr("Select a qmake executable"),
-                                                     dir, filterForQmakeFileDialog());
+    QString dir = currentVersion()->qmakeCommand().toFileInfo().absolutePath();
+    Utils::FileName qtVersion = Utils::FileName::fromString(
+                QFileDialog::getOpenFileName(this,
+                                             tr("Select a qmake executable"),
+                                             dir, filterForQmakeFileDialog()));
     if (qtVersion.isNull())
         return;
     BaseQtVersion *version = QtVersionFactory::createQtVersionFromQMakePath(qtVersion);
@@ -665,7 +668,7 @@ void QtOptionsPageWidget::editPath()
     userChangedCurrentVersion();
     QTreeWidgetItem *item = m_ui->qtdirList->currentItem();
     item->setText(0, version->displayName());
-    item->setText(1, QDir::toNativeSeparators(version->qmakeCommand()));
+    item->setText(1, version->qmakeCommand().toUserOutput());
     item->setData(0, VersionIdRole, version->uniqueId());
     item->setData(0, ToolChainIdRole, defaultToolChainId(version));
     item->setIcon(0, version->isValid()? m_validVersionIcon : m_invalidVersionIcon);
@@ -934,7 +937,7 @@ void QtOptionsPageWidget::updateWidgets()
     BaseQtVersion *version = currentVersion();
     if (version) {
         m_versionUi->nameEdit->setText(version->displayName());
-        m_versionUi->qmakePath->setText(QDir::toNativeSeparators(version->qmakeCommand()));
+        m_versionUi->qmakePath->setText(version->qmakeCommand().toUserOutput());
         m_configurationWidget = version->createConfigurationWidget();
         if (m_configurationWidget) {
             m_versionUi->formLayout->addRow(m_configurationWidget);
diff --git a/src/plugins/qtsupport/qtoptionspage.h b/src/plugins/qtsupport/qtoptionspage.h
index 79d0eb9b22e51867a68bbe6d4f8ea576fcb66adf..694985964459ed47e998ef9b7e9f7f086198ed7c 100644
--- a/src/plugins/qtsupport/qtoptionspage.h
+++ b/src/plugins/qtsupport/qtoptionspage.h
@@ -117,7 +117,7 @@ private slots:
     void toolChainsUpdated();
     void selectedToolChainChanged(int index);
 
-    void qtVersionsDumpUpdated(const QString &qmakeCommand);
+    void qtVersionsDumpUpdated(const Utils::FileName &qmakeCommand);
     void handleDebuggingHelperExpanded(bool expanded);
 
 private:
diff --git a/src/plugins/qtsupport/qtversionfactory.cpp b/src/plugins/qtsupport/qtversionfactory.cpp
index 9f60e3d9e431f55c1e26ffed177f1b77de6f982f..3713792b0b8ea7c76f894d829add89b359c0dff8 100644
--- a/src/plugins/qtsupport/qtversionfactory.cpp
+++ b/src/plugins/qtsupport/qtversionfactory.cpp
@@ -57,7 +57,7 @@ bool sortByPriority(QtVersionFactory *a, QtVersionFactory *b)
     return a->priority() > b->priority();
 }
 
-BaseQtVersion *QtVersionFactory::createQtVersionFromLegacySettings(const QString &qmakePath, int id, QSettings *s)
+BaseQtVersion *QtVersionFactory::createQtVersionFromLegacySettings(const Utils::FileName &qmakePath, int id, QSettings *s)
 {
     BaseQtVersion *v = createQtVersionFromQMakePath(qmakePath);
     if (!v)
@@ -68,13 +68,13 @@ BaseQtVersion *QtVersionFactory::createQtVersionFromLegacySettings(const QString
     return v;
 }
 
-BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const QString &qmakePath, bool isAutoDetected, const QString &autoDetectionSource)
+BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource)
 {
     QHash<QString, QString> versionInfo;
     bool success = BaseQtVersion::queryQMakeVariables(qmakePath, &versionInfo);
     if (!success)
         return 0;
-    QString mkspec = BaseQtVersion::mkspecFromVersionInfo(versionInfo);
+    Utils::FileName mkspec = BaseQtVersion::mkspecFromVersionInfo(versionInfo);
 
     ProFileOption option;
     option.properties = versionInfo;
@@ -82,7 +82,7 @@ BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const QString &qma
     ProFileCacheManager::instance()->incRefCount();
     ProFileParser parser(ProFileCacheManager::instance()->cache(), &msgHandler);
     ProFileEvaluator evaluator(&option, &parser, &msgHandler);
-    if (ProFile *pro = parser.parsedProFile(mkspec + "/qmake.conf")) {
+    if (ProFile *pro = parser.parsedProFile(mkspec.toString() + "/qmake.conf")) {
         evaluator.setCumulative(false);
         evaluator.accept(pro, ProFileEvaluator::LoadProOnly);
         pro->deref();
diff --git a/src/plugins/qtsupport/qtversionfactory.h b/src/plugins/qtsupport/qtversionfactory.h
index fc9ab94f673218ab0ff0057bb7f1e67f63c5cecf..7f1da583060740d3f69cf9b77d7300cd9fe2c875 100644
--- a/src/plugins/qtsupport/qtversionfactory.h
+++ b/src/plugins/qtsupport/qtversionfactory.h
@@ -35,6 +35,7 @@
 
 #include "qtsupport_global.h"
 
+#include <utils/fileutils.h>
 #include <QtCore/QObject>
 #include <QtCore/QVariantMap>
 
@@ -59,10 +60,10 @@ public:
     /// a qtversion, the priority of the desktop factory is 0 and
     /// the desktop factory claims to handle all paths
     virtual int priority() const = 0;
-    virtual BaseQtVersion *create(const QString &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString()) = 0;
+    virtual BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString()) = 0;
 
-    static BaseQtVersion *createQtVersionFromQMakePath(const QString &qmakePath, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
-    static BaseQtVersion *createQtVersionFromLegacySettings(const QString &qmakePath, int id, QSettings *s);
+    static BaseQtVersion *createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected = false, const QString &autoDetectionSource = QString());
+    static BaseQtVersion *createQtVersionFromLegacySettings(const Utils::FileName &qmakePath, int id, QSettings *s);
 };
 
 }
diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp
index 6b6bb525b0bfc903db71ef3b86cdd61b185b967d..a578718e68dd8327bde0516abb33cb0a759fa5c1 100644
--- a/src/plugins/qtsupport/qtversionmanager.cpp
+++ b/src/plugins/qtsupport/qtversionmanager.cpp
@@ -118,6 +118,8 @@ QtVersionManager::QtVersionManager()
 {
     m_self = this;
     m_idcount = 1;
+
+    qRegisterMetaType<Utils::FileName>();
 }
 
 void QtVersionManager::extensionsInitialized()
@@ -213,7 +215,7 @@ void QtVersionManager::updateFromInstaller()
     if (debug) {
         qDebug()<< "======= Existing Qt versions =======";
         foreach (BaseQtVersion *version, m_versions) {
-            qDebug() << version->qmakeCommand() << "id:"<<version->uniqueId();
+            qDebug() << version->qmakeCommand().toString() << "id:"<<version->uniqueId();
             qDebug() << "  autodetection source:"<< version->autodetectionSource();
             qDebug() << "";
         }
@@ -225,10 +227,7 @@ void QtVersionManager::updateFromInstaller()
         if (!data.contains(key))
             break;
         QVariantMap map = data.value(key).toMap();
-        QString path = map.value(OLDQTVERSION_PATH).toString();
-#ifdef Q_OS_WIN
-        path = path.toLower();
-#endif
+        Utils::FileName path = Utils::FileName::fromString(map.value(OLDQTVERSION_PATH).toString());
         QString autodetectionSource = map.value(OLDQTVERSION_SDKSOURCE).toString();
         foreach (BaseQtVersion *v, m_versions) {
             if (v->qmakeCommand() == path) {
@@ -236,7 +235,7 @@ void QtVersionManager::updateFromInstaller()
                     v->setAutoDetectionSource(autodetectionSource);
                 } else {
                     if (debug)
-                        qDebug() << "## Conflicting autodetictonSource for"<<path<<"\n"
+                        qDebug() << "## Conflicting autodetictonSource for"<<path.toString()<<"\n"
                                  <<"     version retains"<<v->autodetectionSource();
                 }
                 // No break, we want to mark all qt versions matching that path
@@ -251,7 +250,7 @@ void QtVersionManager::updateFromInstaller()
     if (debug) {
         qDebug()<< "======= After using OLD QtVersion data to mark versions =======";
         foreach (BaseQtVersion *version, m_versions) {
-            qDebug() << version->qmakeCommand() << "id:"<<version->uniqueId();
+            qDebug() << version->qmakeCommand().toString() << "id:"<<version->uniqueId();
             qDebug() << "  autodetection source:"<< version->autodetectionSource();
             qDebug() << "";
         }
@@ -317,7 +316,7 @@ void QtVersionManager::updateFromInstaller()
     if (debug) {
         qDebug() << "======= Before removing outdated sdk versions =======";
         foreach (BaseQtVersion *version, m_versions) {
-            qDebug() << version->qmakeCommand() << "id:"<<version->uniqueId();
+            qDebug() << version->qmakeCommand().toString() << "id:"<<version->uniqueId();
             qDebug() << "  autodetection source:"<< version->autodetectionSource();
             qDebug() << "";
         }
@@ -335,7 +334,7 @@ void QtVersionManager::updateFromInstaller()
     if (debug) {
         qDebug()<< "======= End result =======";
         foreach (BaseQtVersion *version, m_versions) {
-            qDebug() << version->qmakeCommand() << "id:"<<version->uniqueId();
+            qDebug() << version->qmakeCommand().toString() << "id:"<<version->uniqueId();
             qDebug() << "  autodetection source:"<< version->autodetectionSource();
             qDebug() << "";
         }
@@ -363,7 +362,7 @@ void QtVersionManager::saveQtVersions()
 
 void QtVersionManager::findSystemQt()
 {
-    QString systemQMakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(Utils::Environment::systemEnvironment());
+    Utils::FileName systemQMakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(Utils::Environment::systemEnvironment());
     if (systemQMakePath.isNull())
         return;
 
@@ -390,7 +389,7 @@ bool QtVersionManager::legacyRestore()
         else if (m_idcount < id)
             m_idcount = id + 1;
 
-        QString qmakePath = s->value("QMakePath").toString();
+        Utils::FileName qmakePath = Utils::FileName::fromString(s->value("QMakePath").toString());
         if (qmakePath.isEmpty())
             continue; //skip this version
 
@@ -501,7 +500,7 @@ void QtVersionManager::updateDocumentation()
     helpManager->registerDocumentation(files);
 }
 
-void QtVersionManager::updateDumpFor(const QString &qmakeCommand)
+void QtVersionManager::updateDumpFor(const Utils::FileName &qmakeCommand)
 {
     foreach (BaseQtVersion *v, versions()) {
         if (v->qmakeCommand() == qmakeCommand)
@@ -525,17 +524,15 @@ void QtVersionManager::updateSettings()
 
     // in SDKs, we want to prefer the Qt version shipping with the SDK
     QSettings *settings = Core::ICore::instance()->settings();
-    QString preferred = settings->value(QLatin1String("PreferredQMakePath")).toString();
-    preferred = QDir::fromNativeSeparators(preferred);
+    Utils::FileName preferred = Utils::FileName::fromUserInput(settings->value(QLatin1String("PreferredQMakePath")).toString());
     if (!preferred.isEmpty()) {
 #ifdef Q_OS_WIN
-        preferred = preferred.toLower();
-        if (!preferred.endsWith(QLatin1String(".exe")))
-            preferred.append(QLatin1String(".exe"));
+        if (!preferred.endsWith(".exe"))
+            preferred.append(".exe");
 #endif
         foreach (version, candidates) {
             if (version->qmakeCommand() == preferred) {
-                emit updateExamples(version->examplesPath(), version->demosPath(), version->sourcePath());
+                emit updateExamples(version->examplesPath(), version->demosPath(), version->sourcePath().toString());
                 return;
             }
         }
@@ -544,14 +541,14 @@ void QtVersionManager::updateSettings()
     // prefer versions with declarative examples
     foreach (version, candidates) {
         if (QDir(version->examplesPath()+"/declarative").exists()) {
-            emit updateExamples(version->examplesPath(), version->demosPath(), version->sourcePath());
+            emit updateExamples(version->examplesPath(), version->demosPath(), version->sourcePath().toString());
             return;
         }
     }
 
     if (!candidates.isEmpty()) {
         version = candidates.first();
-        emit updateExamples(version->examplesPath(), version->demosPath(), version->sourcePath());
+        emit updateExamples(version->examplesPath(), version->demosPath(), version->sourcePath().toString());
         return;
     }
     return;
@@ -690,7 +687,7 @@ void QtVersionManager::setNewQtVersions(QList<BaseQtVersion *> newVersions)
 // That is returns the directory
 // To find out whether we already have a qtversion for that directory call
 // QtVersion *QtVersionManager::qtVersionForDirectory(const QString directory);
-QString QtVersionManager::findQMakeBinaryFromMakefile(const QString &makefile)
+Utils::FileName QtVersionManager::findQMakeBinaryFromMakefile(const QString &makefile)
 {
     bool debugAdding = false;
     QFile fi(makefile);
@@ -711,19 +708,15 @@ QString QtVersionManager::findQMakeBinaryFromMakefile(const QString &makefile)
                 // Is qmake still installed?
                 QFileInfo fi(qmakePath);
                 if (fi.exists()) {
-                    qmakePath = fi.absoluteFilePath();
-#ifdef Q_OS_WIN
-                    qmakePath = qmakePath.toLower();
-#endif
-                    return qmakePath;
+                    return Utils::FileName(fi);
                 }
             }
         }
     }
-    return QString();
+    return Utils::FileName();
 }
 
-BaseQtVersion *QtVersionManager::qtVersionForQMakeBinary(const QString &qmakePath)
+BaseQtVersion *QtVersionManager::qtVersionForQMakeBinary(const Utils::FileName &qmakePath)
 {
    foreach (BaseQtVersion *version, versions()) {
        if (version->qmakeCommand() == qmakePath) {
diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h
index 27f5d72b37813ecc4c527394a370d85aec3c8424..fb46fcf31c0a16f22891f0446791431934cec618 100644
--- a/src/plugins/qtsupport/qtversionmanager.h
+++ b/src/plugins/qtsupport/qtversionmanager.h
@@ -84,7 +84,7 @@ public:
     //       need to get a new pointer by calling this method again!
     BaseQtVersion *version(int id) const;
 
-    BaseQtVersion *qtVersionForQMakeBinary(const QString &qmakePath);
+    BaseQtVersion *qtVersionForQMakeBinary(const Utils::FileName &qmakePath);
 
     // Used by the projectloadwizard
     void addVersion(BaseQtVersion *version);
@@ -105,7 +105,7 @@ public:
     static MakefileCompatible makefileIsFor(const QString &makefile, const QString &proFile);
     static QPair<BaseQtVersion::QmakeBuildConfigs, QString> scanMakeFile(const QString &makefile,
                                                                      BaseQtVersion::QmakeBuildConfigs defaultBuildConfig);
-    static QString findQMakeBinaryFromMakefile(const QString &directory);
+    static Utils::FileName findQMakeBinaryFromMakefile(const QString &directory);
     bool isValidId(int id) const;
 
     // Compatibility with pre-2.2:
@@ -113,12 +113,12 @@ public:
     QString popPendingGcceUpdate();
 signals:
     // content of BaseQtVersion objects with qmake path might have changed
-    void dumpUpdatedFor(const QString &qmakeCommand);
+    void dumpUpdatedFor(const Utils::FileName &qmakeCommand);
     void qtVersionsChanged(const QList<int> &uniqueIds);
     void updateExamples(QString, QString, QString);
 
 public slots:
-    void updateDumpFor(const QString &qmakeCommand);
+    void updateDumpFor(const Utils::FileName &qmakeCommand);
 
 private slots:
     void updateSettings();
diff --git a/src/plugins/remotelinux/embeddedlinuxqtversion.cpp b/src/plugins/remotelinux/embeddedlinuxqtversion.cpp
index 75d0ca516fc6608f5541c0e6f1dbe4231010009d..ed0751eb45add7924ecae5ada39bbfc3bb392f3d 100644
--- a/src/plugins/remotelinux/embeddedlinuxqtversion.cpp
+++ b/src/plugins/remotelinux/embeddedlinuxqtversion.cpp
@@ -43,7 +43,7 @@ EmbeddedLinuxQtVersion::EmbeddedLinuxQtVersion()
     : BaseQtVersion()
 { }
 
-EmbeddedLinuxQtVersion::EmbeddedLinuxQtVersion(const QString &path, bool isAutodetected, const QString &autodetectionSource)
+EmbeddedLinuxQtVersion::EmbeddedLinuxQtVersion(const Utils::FileName &path, bool isAutodetected, const QString &autodetectionSource)
     : BaseQtVersion(path, isAutodetected, autodetectionSource)
 { }
 
diff --git a/src/plugins/remotelinux/embeddedlinuxqtversion.h b/src/plugins/remotelinux/embeddedlinuxqtversion.h
index 7bc84c8b85aa88da7f54e94532d28bd3fb4973ca..a31b053099e195819960449b56bb41dee849f336 100644
--- a/src/plugins/remotelinux/embeddedlinuxqtversion.h
+++ b/src/plugins/remotelinux/embeddedlinuxqtversion.h
@@ -42,7 +42,7 @@ class EmbeddedLinuxQtVersion : public QtSupport::BaseQtVersion
 {
 public:
     EmbeddedLinuxQtVersion();
-    EmbeddedLinuxQtVersion(const QString &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
+    EmbeddedLinuxQtVersion(const Utils::FileName &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
     ~EmbeddedLinuxQtVersion();
     EmbeddedLinuxQtVersion *clone() const;
 
diff --git a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp
index fb4f52169c9d7a3b104f9e3e5bc87afb2ef23a5b..59c1d97108aa1f92d3f1c0af4e8d9c8eae187733 100644
--- a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp
+++ b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp
@@ -65,14 +65,14 @@ int EmbeddedLinuxQtVersionFactory::priority() const
     return 10;
 }
 
-QtSupport::BaseQtVersion *EmbeddedLinuxQtVersionFactory::create(const QString &qmakePath,
+QtSupport::BaseQtVersion *EmbeddedLinuxQtVersionFactory::create(const Utils::FileName &qmakePath,
                                                                 ProFileEvaluator *evaluator,
                                                                 bool isAutoDetected,
                                                                 const QString &autoDetectionSource)
 {
     Q_UNUSED(evaluator);
 
-    QFileInfo fi(qmakePath);
+    QFileInfo fi = qmakePath.toFileInfo();
     if (!fi.exists() || !fi.isExecutable() || !fi.isFile())
         return 0;
 
diff --git a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h
index bb422780f851be904a234703dc499ded4b162c82..01672ccd2201b051095fb331f36580129ef37acc 100644
--- a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h
+++ b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h
@@ -48,7 +48,7 @@ public:
     QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data);
 
     int priority() const;
-    QtSupport::BaseQtVersion *create(const QString &qmakePath, ProFileEvaluator *evaluator,
+    QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator,
                                      bool isAutoDetected = false,
                                      const QString &autoDetectionSource = QString());
 };
diff --git a/src/plugins/remotelinux/embeddedlinuxtarget.cpp b/src/plugins/remotelinux/embeddedlinuxtarget.cpp
index eae7b66c1b18868968d4f16602b2a1cb2a32e36a..9d9d2c203f93a73d6b73abe5ab7bfc19b282c68e 100644
--- a/src/plugins/remotelinux/embeddedlinuxtarget.cpp
+++ b/src/plugins/remotelinux/embeddedlinuxtarget.cpp
@@ -73,11 +73,11 @@ QList<ProjectExplorer::RunConfiguration *> EmbeddedLinuxTarget::runConfiguration
     return result;
 }
 
-QString EmbeddedLinuxTarget::mkspec(const Qt4ProjectManager::Qt4BuildConfiguration *bc) const
+Utils::FileName EmbeddedLinuxTarget::mkspec(const Qt4ProjectManager::Qt4BuildConfiguration *bc) const
 {
    QtSupport::BaseQtVersion *version = bc->qtVersion();
    if (!version)
-       return QString();
+       return Utils::FileName();
    return version->mkspec();
 }
 
diff --git a/src/plugins/remotelinux/embeddedlinuxtarget.h b/src/plugins/remotelinux/embeddedlinuxtarget.h
index 5c4970e96e9367c298374651fcda915f18fb3b48..30ba63f31230d59af4c8fc6f0ee08c76b33d70eb 100644
--- a/src/plugins/remotelinux/embeddedlinuxtarget.h
+++ b/src/plugins/remotelinux/embeddedlinuxtarget.h
@@ -55,7 +55,7 @@ public:
 
     QList<ProjectExplorer::RunConfiguration *> runConfigurationsForNode(ProjectExplorer::Node *n);
 
-    QString mkspec(const Qt4ProjectManager::Qt4BuildConfiguration *bc) const;
+    Utils::FileName mkspec(const Qt4ProjectManager::Qt4BuildConfiguration *bc) const;
 
 private:
     Qt4ProjectManager::Qt4BuildConfigurationFactory *m_buildConfigurationFactory;