Index: /trunk/include/VBox/HostServices/DragAndDropSvc.h
===================================================================
--- /trunk/include/VBox/HostServices/DragAndDropSvc.h	(revision 55090)
+++ /trunk/include/VBox/HostServices/DragAndDropSvc.h	(revision 55091)
@@ -70,5 +70,5 @@
     /* OpenOffice formats. */                                                                   \
     /* See: https://wiki.openoffice.org/wiki/Documentation/DevGuide/OfficeDev/Common_Application_Features#OpenOffice.org_Clipboard_Data_Formats */ \
-    "application/x-openoffice-embed-source-xml;windows_formatname=\"Star Embed Source (XML)\""  \
+    "application/x-openoffice-embed-source-xml;windows_formatname=\"Star Embed Source (XML)\"", \
     "application/x-openoffice;windows_formatname=\"Bitmap\""
 
Index: /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.cpp	(revision 55090)
+++ /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.cpp	(revision 55091)
@@ -78,7 +78,11 @@
     RT_ZERO(startupInfo);
 
+    LogFlowFunc(("Supported formats:\n"));
     const RTCString arrEntries[] = { VBOX_DND_FORMATS_DEFAULT };
     for (size_t i = 0; i < RT_ELEMENTS(arrEntries); i++)
+    {
+        LogFlowFunc(("\t%s\n", arrEntries[i].c_str()));
         this->lstAllowedFormats.append(arrEntries[i]);
+    }
 }
 
@@ -755,9 +759,24 @@
     for (size_t i = 0; i < lstFormats.size(); i++)
     {
-        bool fSupported = this->lstAllowedFormats.contains(lstFormats.at(i));
-        if (fSupported)
-            this->lstFormats.append(lstFormats.at(i));
+        bool fSupported = false;
+        for (size_t a = 0; a < this->lstAllowedFormats.size(); a++)
+        {
+            LogFlowThisFunc(("\t\"%s\" <=> \"%s\"\n", this->lstAllowedFormats.at(a).c_str(), lstFormats.at(i).c_str()));
+            fSupported = RTStrICmp(this->lstAllowedFormats.at(a).c_str(), lstFormats.at(i).c_str()) == 0;
+            if (fSupported)
+            {
+                this->lstFormats.append(lstFormats.at(i));
+                break;
+            }
+        }
+
         LogFlowThisFunc(("\t%s: %RTbool\n", lstFormats.at(i).c_str(), fSupported));
     }
+
+    /*
+     * Warn in the log if this guest does not accept anything.
+     */
+    if (!this->lstFormats.size())
+        LogRel(("DnD: Warning: No supported drag'n drop formats on the guest found!\n"));
 
     /*
@@ -767,6 +786,5 @@
     try
     {
-        /* Translate our drop actions into
-         * allowed Windows drop effects. */
+        /* Translate our drop actions into allowed Windows drop effects. */
         startupInfo.dwOKEffects = DROPEFFECT_NONE;
         if (uAllActions)
@@ -886,27 +904,30 @@
     if (mState == Dragging)
     {
-        Assert(lstFormats.size() >= 1);
-
-        /** @todo What to do when multiple formats are available? */
-        mFormatRequested = lstFormats.at(0);
-
-        rc = RTCritSectEnter(&mCritSect);
-        if (RT_SUCCESS(rc))
-        {
-            if (startupInfo.pDataObject)
-                startupInfo.pDataObject->SetStatus(VBoxDnDDataObject::Dropping);
-            else
-                rc = VERR_NOT_FOUND;
-
-            RTCritSectLeave(&mCritSect);
-        }
-
-        if (RT_SUCCESS(rc))
-        {
-            LogRel(("DnD: Requesting data as '%s' ...\n", mFormatRequested.c_str()));
-            rc = VbglR3DnDHGRequestData(mClientID, mFormatRequested.c_str());
-            if (RT_FAILURE(rc))
-                LogFlowThisFunc(("Requesting data failed with rc=%Rrc\n", rc));
-        }
+        if (lstFormats.size() >= 1)
+        {
+            /** @todo What to do when multiple formats are available? */
+            mFormatRequested = lstFormats.at(0);
+
+            rc = RTCritSectEnter(&mCritSect);
+            if (RT_SUCCESS(rc))
+            {
+                if (startupInfo.pDataObject)
+                    startupInfo.pDataObject->SetStatus(VBoxDnDDataObject::Dropping);
+                else
+                    rc = VERR_NOT_FOUND;
+
+                RTCritSectLeave(&mCritSect);
+            }
+
+            if (RT_SUCCESS(rc))
+            {
+                LogRel(("DnD: Requesting data as '%s' ...\n", mFormatRequested.c_str()));
+                rc = VbglR3DnDHGRequestData(mClientID, mFormatRequested.c_str());
+                if (RT_FAILURE(rc))
+                    LogFlowThisFunc(("Requesting data failed with rc=%Rrc\n", rc));
+            }
+        }
+        else /* Should never happen. */
+            LogRel(("DnD: Error: Host did not specify a data format for drop data\n"));
     }
 
@@ -1404,7 +1425,12 @@
                      mMode, mState));
 
-    lstAllowedFormats.clear();
-    lstFormats.clear();
-    uAllActions = DND_IGNORE_ACTION;
+    /*
+     * Note: Don't clear this->lstAllowedFormats at the moment, as this value is initialized
+     *       on class creation. We might later want to modify the allowed formats in runtime,
+     *       so keep this in mind when implementing this.
+     */
+
+    this->lstFormats.clear();
+    this->uAllActions = DND_IGNORE_ACTION;
 
     int rc2 = setMode(Unknown);
