Index: trunk/include/VBox/GuestHost/SharedClipboard-win.h
===================================================================
--- trunk/include/VBox/GuestHost/SharedClipboard-win.h	(revision 90053)
+++ trunk/include/VBox/GuestHost/SharedClipboard-win.h	(revision 90054)
@@ -111,5 +111,9 @@
     /** Window handle which is next to us in the clipboard chain. */
     HWND               hWndNextInChain;
-    /** Window handle of the clipboard owner *if* we are the owner. */
+    /** Window handle of the clipboard owner *if* we are the owner.
+     * @todo r=bird: Ignore the misleading statement above.  This is only set to
+     * NULL by the initialization code and then it's set to the clipboard owner
+     * after we announce data to the clipboard.  So, essentially this will be our
+     * windows handle or NULL.  End of story. */
     HWND               hWndClipboardOwnerUs;
     /** Structure for maintaining the new clipboard API. */
@@ -152,5 +156,5 @@
 int SharedClipboardWinHandleWMTimer(PSHCLWINCTX pWinCtx);
 
-int SharedClipboardWinAnnounceFormats(PSHCLWINCTX pWinCtx, SHCLFORMATS fFormats);
+int SharedClipboardWinClearAndAnnounceFormats(PSHCLWINCTX pWinCtx, SHCLFORMATS fFormats, HWND hWnd);
 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
 int SharedClipboardWinTransferCreate(PSHCLWINCTX pWinCtx, PSHCLTRANSFER pTransfer);
Index: trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxClipboard.cpp
===================================================================
--- trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxClipboard.cpp	(revision 90053)
+++ trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxClipboard.cpp	(revision 90054)
@@ -519,14 +519,5 @@
                 {
 #endif
-                    int rc = SharedClipboardWinOpen(hwnd);
-                    if (RT_SUCCESS(rc))
-                    {
-                        SharedClipboardWinClear();
-
-                        rc = SharedClipboardWinAnnounceFormats(pWinCtx, fFormats);
-                    }
-
-                    SharedClipboardWinClose();
-
+                    SharedClipboardWinClearAndAnnounceFormats(pWinCtx, fFormats, hwnd);
 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
                 }
Index: trunk/src/VBox/GuestHost/SharedClipboard/clipboard-win.cpp
===================================================================
--- trunk/src/VBox/GuestHost/SharedClipboard/clipboard-win.cpp	(revision 90053)
+++ trunk/src/VBox/GuestHost/SharedClipboard/clipboard-win.cpp	(revision 90054)
@@ -819,5 +819,5 @@
  * @param   fFormats            Clipboard format(s) to announce.
  */
-int SharedClipboardWinAnnounceFormats(PSHCLWINCTX pWinCtx, SHCLFORMATS fFormats)
+static int sharedClipboardWinAnnounceFormats(PSHCLWINCTX pWinCtx, SHCLFORMATS fFormats)
 {
     LogFunc(("fFormats=0x%x\n", fFormats));
@@ -893,5 +893,32 @@
 }
 
+/**
+ * Opens the clipboard, clears it, announces @a fFormats and closes it.
+ *
+ * The actual rendering (setting) of the clipboard data will be done later with
+ * a separate WM_RENDERFORMAT message.
+ *
+ * @returns VBox status code. VERR_NOT_SUPPORTED if the format is not supported / handled.
+ * @param   pWinCtx     Windows context to use.
+ * @param   fFormats    Clipboard format(s) to announce.
+ * @param   hWnd        The window handle to use as owner.
+ */
+int SharedClipboardWinClearAndAnnounceFormats(PSHCLWINCTX pWinCtx, SHCLFORMATS fFormats, HWND hWnd)
+{
+    int rc = SharedClipboardWinOpen(hWnd);
+    if (RT_SUCCESS(rc))
+    {
+        SharedClipboardWinClear();
+
+        rc = sharedClipboardWinAnnounceFormats(pWinCtx, fFormats);
+        Assert(pWinCtx->hWndClipboardOwnerUs == hWnd || pWinCtx->hWndClipboardOwnerUs == NULL);
+
+        SharedClipboardWinClose();
+    }
+    return rc;
+}
+
 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
+
 /**
  * Creates an Shared Clipboard transfer by announcing transfer data  (via IDataObject) to Windows.
@@ -1208,4 +1235,5 @@
     return rc;
 }
+
 #endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS */
 
Index: trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp
===================================================================
--- trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp	(revision 90053)
+++ trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp	(revision 90054)
@@ -383,14 +383,5 @@
             {
 #endif
-                int rc = SharedClipboardWinOpen(hWnd);
-                if (RT_SUCCESS(rc))
-                {
-                    SharedClipboardWinClear();
-
-                    rc = SharedClipboardWinAnnounceFormats(pWinCtx, fFormats);
-
-                    SharedClipboardWinClose();
-                }
-
+                int rc = SharedClipboardWinClearAndAnnounceFormats(pWinCtx, fFormats, hWnd);
                 if (RT_FAILURE(rc))
                     LogRel(("Shared Clipboard: Reporting clipboard formats %#x to Windows host failed with %Rrc\n", fFormats, rc));
