diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp
index 7e89de5a77f21a84d57942e87260615d9ec0eb56..b6fbf0edcbc903812aec721fea3ac7378f24debc 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp
@@ -29,8 +29,12 @@
 
 #include "maemoglobal.h"
 
+#include <utils/environment.h>
+
 #include <QtCore/QCoreApplication>
+#include <QtGui/QDesktopServices>
 #include <QtCore/QDir>
+#include <QtCore/QProcess>
 #include <QtCore/QString>
 
 #define TR(text) QCoreApplication::translate("Qt4ProjectManager::Internal::MaemoGlobal", text)
@@ -104,5 +108,24 @@ bool MaemoGlobal::removeRecursively(const QString &filePath, QString &error)
     return true;
 }
 
+void MaemoGlobal::callMaddeShellScript(QProcess &proc, const QString &maddeRoot,
+    const QString &command, const QStringList &args)
+{
+    QString actualCommand = command;
+    QStringList actualArgs = args;
+#ifdef Q_OS_WIN
+    Utils::Environment env(proc.environment());
+    env.prependOrSetPath(maddeRoot + QLatin1String("/bin"));
+    env.prependOrSet(QLatin1String("HOME"),
+        QDesktopServices::storageLocation(QDesktopServices::HomeLocation));
+    proc.setEnvironment(env.toStringList());
+    actualArgs.prepend(command);
+    actualCommand = maddeRoot + QLatin1String("/bin/sh.exe");
+#else
+    Q_UNUSED(maddeRoot);
+#endif
+    proc.start(actualCommand, actualArgs);
+}
+
 } // namespace Internal
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h
index d20bff056223666626e5a5d322c646cd9e7394ed..24f8cd2cf3194985fc6a7aab3a3863d4078a9c01 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h
@@ -42,6 +42,7 @@
     MaemoGlobal::assertState<State>(expected, actual, Q_FUNC_INFO)
 
 QT_BEGIN_NAMESPACE
+class QProcess;
 class QString;
 QT_END_NAMESPACE
 
@@ -58,6 +59,8 @@ public:
     static QString remoteSourceProfilesCommand();
 
     static bool removeRecursively(const QString &filePath, QString &error);
+    static void callMaddeShellScript(QProcess &proc, const QString &maddeRoot,
+        const QString &command, const QStringList &args);
 
     template<class T> static T *buildStep(const ProjectExplorer::DeployConfiguration *dc)
     {
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
index af03ca469bb54acf5b50ed726481391ef6728234..e17ed23a0dda485c26b66b3b8d89a0eef2150b16 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
@@ -32,6 +32,7 @@
 #include "maemoconstants.h"
 #include "maemodeploystepfactory.h"
 #include "maemodeviceconfigurations.h"
+#include "maemoglobal.h"
 #include "maemopackagecreationfactory.h"
 #include "maemopublishingwizardfactories.h"
 #include "maemoqemumanager.h"
@@ -106,25 +107,14 @@ bool MaemoManager::isValidMaemoQtVersion(const QtVersion *version) const
     QDir dir(path);
     const QByteArray target = dir.dirName().toAscii();
     dir.cdUp(); dir.cdUp();
-    QString madAdminCommand(dir.absolutePath() + QLatin1String("/bin/mad-admin"));
+    const QString madAdminCommand(dir.absolutePath() + QLatin1String("/bin/mad-admin"));
     if (!QFileInfo(madAdminCommand).exists())
         return false;
 
     QProcess madAdminProc;
-    QStringList arguments(QLatin1String("list"));
-
-#ifdef Q_OS_WIN
-    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
-    env.insert(QLatin1String("PATH"),
-        QDir::toNativeSeparators(dir.absolutePath() % QLatin1String("/bin"))
-        % QLatin1Char(';') % env.value(QLatin1String("PATH")));
-    madAdminProc.setProcessEnvironment(env);
-
-    arguments.prepend(madAdminCommand);
-    madAdminCommand = dir.absolutePath() + QLatin1String("/bin/sh.exe");
-#endif
-
-    madAdminProc.start(madAdminCommand, arguments);
+    const QStringList arguments(QLatin1String("list"));
+    MaemoGlobal::callMaddeShellScript(madAdminProc, dir.absolutePath(),
+        madAdminCommand, arguments);
     if (!madAdminProc.waitForStarted() || !madAdminProc.waitForFinished())
         return false;
 
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopublisherfremantlefree.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopublisherfremantlefree.cpp
index b127650edf8ad5e9015aa90da1b3596b612817e9..1e1e534317e4b31a3872f3032266235b2171c13e 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopublisherfremantlefree.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopublisherfremantlefree.cpp
@@ -315,16 +315,11 @@ void MaemoPublisherFremantleFree::runDpkgBuildPackage()
     emit progressReport(tr("Building source package..."));
     const MaemoToolChain * const tc
         = dynamic_cast<MaemoToolChain *>(m_buildConfig->toolChain());
-    QStringList args = QStringList() << QLatin1String("-t")
+    const QStringList args = QStringList() << QLatin1String("-t")
         << tc->targetName() << QLatin1String("dpkg-buildpackage")
         << QLatin1String("-S") << QLatin1String("-us") << QLatin1String("-uc");
-    QString madCommand = tc->maddeRoot() + QLatin1String("/bin/mad");
-
-#ifdef Q_OS_WIN
-    args.prepend(madCommand);
-    madCommand = tc->maddeRoot() + QLatin1String("/bin/sh.exe");
-#endif
-    m_process->start(madCommand, args);
+    const QString madCommand = tc->maddeRoot() + QLatin1String("/bin/mad");
+    MaemoGlobal::callMaddeShellScript(*m_process, tc->maddeRoot(), madCommand, args);
 }
 
 // We have to implement the SCP protocol, because the maemo.org
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp
index bb3f7e8735d37d41e2609f00f6bb1686a2c0ca5b..cee546f2067d8cb5c07cafecde6b878fcf84e7fb 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp
@@ -29,6 +29,7 @@
 
 #include "maemoqemumanager.h"
 
+#include "maemoglobal.h"
 #include "maemorunconfiguration.h"
 #include "maemotoolchain.h"
 #include "qtversionmanager.h"
@@ -224,7 +225,7 @@ void MaemoQemuManager::projectChanged(ProjectExplorer::Project *project)
 
 bool targetIsMaemo(const QString &id)
 {
-    return id == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID);
+    return id == QLatin1String(Qt4ProjectManager::Constants::MAEMO_DEVICE_TARGET_ID);
 }
 
 void MaemoQemuManager::targetAdded(ProjectExplorer::Target *target)
@@ -680,28 +681,14 @@ QString MaemoQemuManager::runtimeForQtVersion(const QString &qmakeCommand) const
     const QString &target = targetRoot(qmakeCommand);
     const QString &madRoot = maddeRoot(qmakeCommand);
 
-    QString madCommand = madRoot + QLatin1String("/bin/mad");
+    const QString madCommand = madRoot + QLatin1String("/bin/mad");
     if (!QFileInfo(madCommand).exists())
         return QString();
 
     QProcess madProc;
-    QStringList arguments(QLatin1String("info"));
+    const QStringList arguments(QLatin1String("info"));
 
-#ifdef Q_OS_WIN
-    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
-    env.insert("HOME",
-        QDesktopServices::storageLocation(QDesktopServices::HomeLocation));
-    env.insert(QLatin1String("PATH"),
-        QDir::toNativeSeparators(madRoot % QLatin1String("/bin"))
-        % QLatin1Char(';') % env.value(QLatin1String("PATH")));
-
-    madProc.setProcessEnvironment(env);
-
-    arguments.prepend(madCommand);
-    madCommand = madRoot + QLatin1String("/bin/sh.exe");
-#endif
-
-    madProc.start(madCommand, arguments);
+    MaemoGlobal::callMaddeShellScript(madProc, madRoot, madCommand, arguments);
     if (!madProc.waitForStarted() || !madProc.waitForFinished())
         return QString();