diff --git a/src/gui/kernel/qdnd.cpp b/src/gui/kernel/qdnd.cpp
index b05da1b..68ab5c7 100644
--- a/src/gui/kernel/qdnd.cpp
+++ b/src/gui/kernel/qdnd.cpp
@@ -341,6 +341,7 @@ QByteArray QInternalMimeData::renderDataHelper(const QString &mimeType, const QM
             }
         }
     }
+    qDebug() << __FUNCTION__ << mimeType << ba.size();
     return ba;
 }
 
diff --git a/src/plugins/platforms/windows/qwindowsmime.cpp b/src/plugins/platforms/windows/qwindowsmime.cpp
index 7e893a9..7f9e38b 100644
--- a/src/plugins/platforms/windows/qwindowsmime.cpp
+++ b/src/plugins/platforms/windows/qwindowsmime.cpp
@@ -991,11 +991,19 @@ public:
 private:
     bool hasOriginalDIBV5(IDataObject *pDataObj) const;
     UINT CF_PNG;
+    UINT m_officePng;
+    UINT m_officeGif;
+    UINT m_officeJfif;
 };
 
+
+
 QWindowsMimeImage::QWindowsMimeImage()
 {
-    CF_PNG = RegisterClipboardFormat(L"PNG");
+    CF_PNG = 0; // RegisterClipboardFormat(L"PNG");
+    m_officePng = 0; // RegisterClipboardFormat(L"PNG+Office Art");
+    m_officeGif = 0; // RegisterClipboardFormat(L"GIF+Office Art");
+    m_officeJfif =  RegisterClipboardFormat(L"JFIF+Office Art");
 }
 
 QVector<FORMATETC> QWindowsMimeImage::formatsForMime(const QString &mimeType, const QMimeData *mimeData) const
@@ -1008,6 +1016,9 @@ QVector<FORMATETC> QWindowsMimeImage::formatsForMime(const QString &mimeType, co
             formatetcs += setCf(CF_DIBV5);
         formatetcs += setCf(CF_DIB);
         formatetcs += setCf(CF_PNG); // QTBUG-86848, Paste into GIMP queries for PNG.
+        formatetcs += setCf(m_officePng);
+        formatetcs += setCf(m_officeGif);
+        formatetcs += setCf(m_officeJfif);
     }
     if (!formatetcs.isEmpty())
         qCDebug(lcQpaMime) << __FUNCTION__ << mimeType << formatetcs;
@@ -1042,35 +1053,43 @@ bool QWindowsMimeImage::canConvertFromMime(const FORMATETC &formatetc, const QMi
     // transparency in conversion.
     return cf == CF_DIBV5
         || (cf == CF_DIB && !image.hasAlphaChannel())
-        || cf == int(CF_PNG);
+        || cf == int(CF_PNG)
+        || cf == int(m_officePng)
+        || cf == int(m_officeGif)
+        || cf == int(m_officeJfif);
 }
 
 bool QWindowsMimeImage::convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM * pmedium) const
 {
-    int cf = getCf(formatetc);
-    if ((cf == CF_DIB || cf == CF_DIBV5 || cf == int(CF_PNG)) && mimeData->hasImage()) {
-        QImage img = qvariant_cast<QImage>(mimeData->imageData());
-        if (img.isNull())
-            return false;
+    if (!mimeData->hasImage())
+        return false;
+    QImage img = qvariant_cast<QImage>(mimeData->imageData());
+    if (img.isNull())
+        return false;
+    const UINT cf = formatetc.cfFormat;
+    if (cf == CF_PNG || cf == m_officePng || cf == m_officeGif || cf == m_officeJfif) {
+        const char *format = cf == CF_PNG || cf == m_officePng ?
+            "PNG" : (cf == m_officeJfif ? "JPEG" : "gif");
         QByteArray ba;
-        if (cf == CF_DIB) {
-            if (img.format() > QImage::Format_ARGB32)
-                img = img.convertToFormat(QImage::Format_RGB32);
-            const QByteArray ba = writeDib(img);
-            if (!ba.isEmpty())
-                return setData(ba, pmedium);
-        } else if (cf == int(CF_PNG)) {
-            QBuffer buffer(&ba);
-            const bool written = buffer.open(QIODevice::WriteOnly) && img.save(&buffer, "PNG");
-            buffer.close();
-            if (written)
-                return setData(ba, pmedium);
-        } else {
-            QDataStream s(&ba, QIODevice::WriteOnly);
-            s.setByteOrder(QDataStream::LittleEndian);// Intel byte order ####
-            if (qt_write_dibv5(s, img))
-                return setData(ba, pmedium);
-        }
+        QBuffer buffer(&ba);
+        const bool written = buffer.open(QIODevice::WriteOnly) && img.save(&buffer, format);
+        buffer.close();
+        qDebug() << __FUNCTION__ << format << cf << ba.size() << "bytes";
+        return written && setData(ba, pmedium);
+    }
+    switch (cf) {
+    case CF_DIB: {
+        if (img.format() > QImage::Format_ARGB32)
+            img = img.convertToFormat(QImage::Format_RGB32);
+        const QByteArray ba = writeDib(img);
+        return !ba.isEmpty() && setData(ba, pmedium);
+    }
+    case CF_DIBV5: {
+        QByteArray ba;
+        QDataStream s(&ba, QIODevice::WriteOnly);
+        s.setByteOrder(QDataStream::LittleEndian);// Intel byte order ####
+        return qt_write_dibv5(s, img) && setData(ba, pmedium);
+    }
     }
     return false;
 }
@@ -1347,6 +1366,8 @@ QVector<FORMATETC> QLastResortMimes::formatsForMime(const QString &mimeType, con
     }
     if (!formatetcs.isEmpty())
         qCDebug(lcQpaMime) << __FUNCTION__ << mimeType << formatetcs;
+    else
+        qCDebug(lcQpaMime) << __FUNCTION__ << mimeType << "EMPTY";
     return formatetcs;
 }
 static const char x_qt_windows_mime[] = "application/x-qt-windows-mime;value=\"";
