Index: /trunk/include/VBox/GuestHost/SharedClipboard-win.h
===================================================================
--- /trunk/include/VBox/GuestHost/SharedClipboard-win.h	(revision 81171)
+++ /trunk/include/VBox/GuestHost/SharedClipboard-win.h	(revision 81172)
@@ -258,4 +258,6 @@
     /** List of (cached) file system objects. */
     FsObjEntryList              m_lstEntries;
+    /** Whether the transfer thread is running. */
+    bool                        m_fRunning;
     /** Event being triggered when reading the transfer list been completed. */
     RTSEMEVENT                  m_EventListComplete;
Index: /trunk/src/VBox/GuestHost/SharedClipboard/ClipboardDataObjectImpl-win.cpp
===================================================================
--- /trunk/src/VBox/GuestHost/SharedClipboard/ClipboardDataObjectImpl-win.cpp	(revision 81171)
+++ /trunk/src/VBox/GuestHost/SharedClipboard/ClipboardDataObjectImpl-win.cpp	(revision 81172)
@@ -40,5 +40,5 @@
 /** @todo Also handle Unicode entries.
  *        !!! WARNING: Buggy, doesn't work yet (some memory corruption / garbage in the file name descriptions) !!! */
-//#define VBOX_CLIPBOARD_WITH_UNICODE_SUPPORT 0
+//#define VBOX_CLIPBOARD_WITH_UNICODE_SUPPORT 1
 
 SharedClipboardWinDataObject::SharedClipboardWinDataObject(PSHCLTRANSFER pTransfer,
@@ -50,4 +50,5 @@
     , m_pStream(NULL)
     , m_uObjIdx(0)
+    , m_fRunning(false)
     , m_EventListComplete(NIL_RTSEMEVENT)
     , m_EventTransferComplete(NIL_RTSEMEVENT)
@@ -132,4 +133,6 @@
 SharedClipboardWinDataObject::~SharedClipboardWinDataObject(void)
 {
+    LogFlowFuncEnter();
+
     RTSemEventDestroy(m_EventListComplete);
     m_EventListComplete = NIL_RTSEMEVENT;
@@ -572,12 +575,13 @@
 
         const uint32_t enmTransferStatus = SharedClipboardTransferGetStatus(m_pTransfer);
-
-        LogFlowFunc(("FormatIndex_FileDescriptor%s, transfer status is %s\n",
-                     fUnicode ? "W" : "A", VBoxShClTransferStatusToStr(enmTransferStatus)));
+        RT_NOREF(enmTransferStatus);
+
+        LogFlowFunc(("FormatIndex_FileDescriptor%s, enmTransferStatus=%s, m_fRunning=%RTbool\n",
+                     fUnicode ? "W" : "A", VBoxShClTransferStatusToStr(enmTransferStatus), m_fRunning));
 
         int rc;
 
         /* The caller can call GetData() several times, so make sure we don't do the same transfer multiple times. */
-        if (enmTransferStatus == SHCLTRANSFERSTATUS_INITIALIZED)
+        if (!m_fRunning)
         {
             /* Start the transfer asynchronously in a separate thread. */
@@ -585,4 +589,6 @@
             if (RT_SUCCESS(rc))
             {
+                m_fRunning = true;
+
                 /* Don't block for too long here, as this also will screw other apps running on the OS. */
                 LogFunc(("Waiting for listing to arrive ...\n"));
