diff -rupN a/src/plugins/windows/qwindowsscreen.cpp b/src/plugins/windows/qwindowsscreen.cpp
--- a/src/plugins/platforms/windows/qwindowsscreen.cpp	2014-12-18 10:03:35.057739447 +0100
+++ b/src/plugins/platforms/windows/qwindowsscreen.cpp	2014-12-18 10:04:32.761740345 +0100
@@ -53,6 +53,7 @@
 #include <QtGui/QScreen>
 
 #include <QtCore/QDebug>
+#include <QtCore/QSet>
 
 QT_BEGIN_NAMESPACE
 
@@ -99,6 +100,7 @@ BOOL QT_WIN_CALLBACK monitorEnumCallback
     QWindowsScreenData data;
     data.geometry = QRect(QPoint(info.rcMonitor.left, info.rcMonitor.top), QPoint(info.rcMonitor.right - 1, info.rcMonitor.bottom - 1));
     data.name = QString::fromWCharArray(info.szDevice);
+    data.id = data.name;
     if (data.name == QLatin1String("WinDisc")) {
         data.flags |= QWindowsScreenData::LockScreen;
     } else {
@@ -149,6 +151,18 @@ static inline WindowsScreenDataList moni
 {
     WindowsScreenDataList result;
     EnumDisplayMonitors(0, 0, monitorEnumCallback, (LPARAM)&result);
+    QSet<QString> names;
+    for(int i=0; i<result.size(); ++i)
+        names.insert(result[i].name);
+    if(names.size() != result.size())
+    {
+        // We are running under wine, which returns a hardcoded name for every screen
+        // Renumber the IDs to avoid collapsing multiple monitors in one
+        for(int i=0; i<result.size(); ++i)
+        {
+            result[i].id = QString(QLatin1String("fixed_id%1")).arg(i);
+        }
+    }
     return result;
 }
 
@@ -161,7 +175,8 @@ static QDebug operator<<(QDebug dbg, con
             << d.availableGeometry.width() << 'x' << d.availableGeometry.height() << '+' << d.availableGeometry.x() << '+' << d.availableGeometry.y()
             << " physical: " << d.physicalSizeMM.width() <<  'x' << d.physicalSizeMM.height()
             << " DPI: " << d.dpi.first << 'x' << d.dpi.second << " Depth: " << d.depth
-            << " Format: " << d.format;
+            << " Format: " << d.format
+            << " ID: " << d.id;
     if (d.flags & QWindowsScreenData::PrimaryScreen)
         nospace << " primary";
     if (d.flags & QWindowsScreenData::VirtualDesktop)
@@ -370,19 +385,19 @@ bool QWindowsScreenManager::handleDispla
 }
 
 static inline int indexOfMonitor(const QList<QWindowsScreen *> &screens,
-                                 const QString &monitorName)
+                                 const QString &monitorId)
 {
     for (int i= 0; i < screens.size(); ++i)
-        if (screens.at(i)->data().name == monitorName)
+        if (screens.at(i)->data().id == monitorId)
             return i;
     return -1;
 }
 
 static inline int indexOfMonitor(const QList<QWindowsScreenData> &screenData,
-                                 const QString &monitorName)
+                                 const QString &monitorId)
 {
     for (int i = 0; i < screenData.size(); ++i)
-        if (screenData.at(i).name == monitorName)
+        if (screenData.at(i).id == monitorId)
             return i;
     return -1;
 }
@@ -398,7 +413,7 @@ bool QWindowsScreenManager::handleScreen
     WindowsScreenDataList newDataList = monitorData();
     const bool lockScreen = newDataList.size() == 1 && (newDataList.front().flags & QWindowsScreenData::LockScreen);
     foreach (const QWindowsScreenData &newData, newDataList) {
-        const int existingIndex = indexOfMonitor(m_screens, newData.name);
+        const int existingIndex = indexOfMonitor(m_screens, newData.id);
         if (existingIndex != -1) {
             m_screens.at(existingIndex)->handleChanges(newData);
         } else {
@@ -412,7 +427,7 @@ bool QWindowsScreenManager::handleScreen
     // temporary lock screen to avoid window recreation (QTBUG-33062).
     if (!lockScreen) {
         for (int i = m_screens.size() - 1; i >= 0; --i) {
-            if (indexOfMonitor(newDataList, m_screens.at(i)->data().name) == -1) {
+            if (indexOfMonitor(newDataList, m_screens.at(i)->data().id) == -1) {
                 qCDebug(lcQpaWindows) << "Removing Monitor: " << m_screens.at(i) ->data();
                 delete m_screens.takeAt(i);
             } // not found
diff -rupN windows.bak/qwindowsscreen.h windows/qwindowsscreen.h
--- a/src/plugins/platforms/windows/qwindowsscreen.h	2014-12-18 10:03:35.021739446 +0100
+++ b/src/plugins/platforms/windows/qwindowsscreen.h	2014-12-18 10:04:35.665740390 +0100
@@ -75,6 +75,7 @@ struct QWindowsScreenData
     QString name;
     Qt::ScreenOrientation orientation;
     qreal refreshRateHz;
+    QString id;
 };
 
 class QWindowsScreen : public QPlatformScreen
