Index: /trunk/src/VBox/Additions/x11/vboxvideo/getmode.c
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/getmode.c	(revision 54039)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/getmode.c	(revision 54040)
@@ -341,5 +341,6 @@
         pVBox->fLastCursorCapabilitiesFromProperty = *pfCursorCapabilities;
     }
-    pVBox->fForceModeSet = (pVBox->fUseHardwareCursor != fOldUseHardwareCursor);
+    if (pVBox->fUseHardwareCursor != fOldUseHardwareCursor)
+        vbvxReprobeCursor(pScrn);
 }
 
@@ -369,22 +370,11 @@
     pScrn = xf86Screens[pWin->drawable.pScreen->myNum];
     pVBox = VBOXGetRec(pScrn);
-    TRACE_LOG("pVBox->fForceModeSet=%u, pVBox->fUseHardwareCursor=%u\n", (unsigned)pVBox->fForceModeSet,
-              pVBox->fUseHardwareCursor);
+    TRACE_LOG("pVBox->fUseHardwareCursor=%u\n", pVBox->fUseHardwareCursor);
     VBoxUpdateSizeHints(pScrn);
     pMode = pScrn->modes;
     if (pScrn->currentMode == pMode)
-    {
-        if (pVBox->fForceModeSet)  /* Swap modes so that the new mode is before the current one. */
-        {
-            pScrn->currentMode = pMode->next;
-            pMode->next->HDisplay = pMode->HDisplay;
-            pMode->next->VDisplay = pMode->VDisplay;
-        }
-        else
-            pMode = pMode->next;
-    }
+        pMode = pMode->next;
     pMode->HDisplay = pVBox->pScreens[0].aPreferredSize.cx;
     pMode->VDisplay = pVBox->pScreens[0].aPreferredSize.cy;
-    pVBox->fForceModeSet = false;
 }
 
Index: /trunk/src/VBox/Additions/x11/vboxvideo/helpers.c
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/helpers.c	(revision 54039)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/helpers.c	(revision 54040)
@@ -25,4 +25,5 @@
 #include <propertyst.h>
 #include <windowstr.h>
+#include <xf86.h>
 #include <X11/Xatom.h>
 #ifdef XORG_7X
@@ -76,2 +77,15 @@
     return VINF_SUCCESS;
 }
+
+void vbvxReprobeCursor(ScrnInfoPtr pScrn)
+{
+    if (ROOT_WINDOW(pScrn) == NULL)
+        return;
+#ifdef XF86_SCRN_INTERFACE
+    pScrn->EnableDisableFBAccess(pScrn, FALSE);
+    pScrn->EnableDisableFBAccess(pScrn, TRUE);
+#else
+    pScrn->EnableDisableFBAccess(pScrn->scrnIndex, FALSE);
+    pScrn->EnableDisableFBAccess(pScrn->scrnIndex, TRUE);
+#endif
+}
Index: /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c	(revision 54039)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c	(revision 54040)
@@ -456,9 +456,9 @@
 
 static DisplayModePtr vbox_output_add_mode(VBOXPtr pVBox, DisplayModePtr *pModes, const char *pszName, int x, int y,
-                                           Bool isPreferred, Bool fDifferentRefresh, Bool isUserDef)
+                                           Bool isPreferred, Bool isUserDef)
 {
     TRACE_LOG("pszName=%s, x=%d, y=%d\n", pszName ? pszName : "(null)", x, y);
     DisplayModePtr pMode = xnfcalloc(1, sizeof(DisplayModeRec));
-    int cRefresh = fDifferentRefresh ? 70 : 60;
+    int cRefresh = 60;
 
     pMode->status        = MODE_OK;
@@ -504,5 +504,5 @@
     VBoxUpdateSizeHints(pScrn);
     pMode = vbox_output_add_mode(pVBox, &pModes, NULL, pVBox->pScreens[iScreen].aPreferredSize.cx,
-                                 pVBox->pScreens[iScreen].aPreferredSize.cy, TRUE, pVBox->fUseHardwareCursor, FALSE);
+                                 pVBox->pScreens[iScreen].aPreferredSize.cy, TRUE, FALSE);
     VBOXEDIDSet(output, pMode);
     /* Add standard modes supported by the host */
@@ -512,5 +512,5 @@
         if (cIndex == 0)
             break;
-        vbox_output_add_mode(pVBox, &pModes, NULL, x, y, FALSE, FALSE, FALSE);
+        vbox_output_add_mode(pVBox, &pModes, NULL, x, y, FALSE, FALSE);
     }
 
@@ -520,5 +520,5 @@
     {
         if (2 == sscanf(pScrn->display->modes[i], "%ux%u", &x, &y))
-            vbox_output_add_mode(pVBox, &pModes, pScrn->display->modes[i], x, y, FALSE, FALSE, TRUE);
+            vbox_output_add_mode(pVBox, &pModes, pScrn->display->modes[i], x, y, FALSE, TRUE);
     }
     TRACE_EXIT();
Index: /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.h
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.h	(revision 54039)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.h	(revision 54040)
@@ -198,6 +198,4 @@
     /** Do we currently want to use the host cursor? */
     Bool fUseHardwareCursor;
-    /** Do we want to force a reset of the current mode because the host cursor support changed?  Only used by old servers. */
-    Bool fForceModeSet;
     /** The last cursor capabilities data read from the X11 property. */
     int32_t fLastCursorCapabilitiesFromProperty;
@@ -246,4 +244,5 @@
 #define VBOXGetRec vbvxGetRec  /* Temporary */
 extern int vbvxGetIntegerPropery(ScrnInfoPtr pScrn, char *pszName, size_t *pcData, int32_t **ppaData);
+extern void vbvxReprobeCursor(ScrnInfoPtr pScrn);
 
 /* setmode.c */
