diff --git a/src/libs/zeroconf/embeddedLib.cpp b/src/libs/zeroconf/embeddedLib.cpp
index 310c25e909b5f41fe70e278df4a49ecd5287c5c8..1e2c3ffe4d83121a0d79dde527ef75f696149237 100644
--- a/src/libs/zeroconf/embeddedLib.cpp
+++ b/src/libs/zeroconf/embeddedLib.cpp
@@ -34,11 +34,12 @@
 
 #include "servicebrowser_p.h"
 
+#include <QCoreApplication>
+#include <QDebug>
+#include <QFileInfo>
 #include <QString>
 #include <QStringList>
 #include <QProcess>
-#include <QCoreApplication>
-#include <QDebug>
 
 #ifdef Q_OS_LINUX
 #define EMBEDDED_LIB
@@ -87,6 +88,28 @@ public:
     bool tryStartDaemon()
     {
         if (!daemonPath.isEmpty()) {
+            QFileInfo dPath(daemonPath);
+            QProcess killall;
+            bool killAllFailed = false;
+#ifdef Q_OS_WIN
+            QString cmd = QLating1String("taskill /im ") + dPath.fileName()
+                    + QLatin1String(" /f /t");
+#else
+            QString cmd = QLatin1String("killall ") + dPath.fileName()
+                    + QLatin1String(" 2> /dev/null");
+#endif
+            killall.start(cmd);
+            if (!killall.waitForStarted()) {
+                killAllFailed = true;
+            } else {
+                killall.closeWriteChannel();
+                killall.waitForFinished();
+            }
+            if (killAllFailed) {
+                this->setError(false,ZConfLib::tr("zeroconf failed to kill other daemons with '%1'").arg(cmd));
+                if (DEBUG_ZEROCONF)
+                    qDebug() << name() << " had an error trying to kill other daemons with " << cmd;
+            }
             if (QProcess::startDetached(daemonPath)) {
                 QThread::yieldCurrentThread();
                 // sleep a bit?