Index: /trunk/src/VBox/Additions/x11/vboxvideo/vboxutils.c
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/vboxutils.c	(revision 35206)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/vboxutils.c	(revision 35207)
@@ -346,8 +346,6 @@
     TRACE_ENTRY();
 
-    if (!pVBox->useDevice)
-        return FALSE;
     pVBox->fHaveHGSMI = vboxInitVbva(pScrn->scrnIndex, pScreen, pVBox);
-    return TRUE;
+    return pVBox->fHaveHGSMI;
 }
 
@@ -1062,16 +1060,26 @@
  * The return type is void as we guarantee we will return some mode.
  */
-void vboxGetPreferredMode(ScrnInfoPtr pScrn, uint32_t *pcx,
+void vboxGetPreferredMode(ScrnInfoPtr pScrn, uint32_t iScreen, uint32_t *pcx,
                           uint32_t *pcy, uint32_t *pcBits)
 {
     /* Query the host for the preferred resolution and colour depth */
-    uint32_t cx = 0, cy = 0, iDisplay = 0, cBits = 32;
-    VBOXPtr pVBox = pScrn->driverPrivate;
-
-    TRACE_ENTRY();
+    uint32_t cx = 0, cy = 0, iScreenIn = 0, cBits = 32;
+    VBOXPtr pVBox = pScrn->driverPrivate;
+
+    TRACE_ENTRY();
+    bool found = false;
+    if (   pVBox->aPreferredSize[iScreen].cx
+        && pVBox->aPreferredSize[iScreen].cy)
+    {
+        cx = pVBox->aPreferredSize[iScreen].cx;
+        cy = pVBox->aPreferredSize[iScreen].cy;
+        found = true;
+    }
     if (pVBox->useDevice)
     {
-        bool found = vboxGetDisplayChangeRequest(pScrn, &cx, &cy, &cBits, &iDisplay);
-        if ((cx == 0) || (cy == 0))
+        if (!found)
+            found = vboxGetDisplayChangeRequest(pScrn, &cx, &cy, &cBits,
+                                                &iScreenIn);
+        if ((cx == 0) || (cy == 0) || iScreenIn != iScreen)
             found = false;
         if (!found)
@@ -1139,5 +1147,5 @@
 
     TRACE_ENTRY();
-    vboxGetPreferredMode(pScrn, &cx, &cy, &cBits);
+    vboxGetPreferredMode(pScrn, 0, &cx, &cy, &cBits);
 #ifdef DEBUG
     /* Count the number of modes for sanity */
Index: /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c	(revision 35206)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c	(revision 35207)
@@ -434,31 +434,14 @@
 
     TRACE_ENTRY();
-    if (vbox_device_available(pVBox))
-    {
-        Bool rc = FALSE;
-        uint32_t x, y, bpp, iScreen;
-        iScreen = (uintptr_t)output->driver_private;
-        if (   pVBox->aPreferredSize[iScreen].cx
-            && pVBox->aPreferredSize[iScreen].cy)
-        {
-            x = pVBox->aPreferredSize[iScreen].cx;
-            y = pVBox->aPreferredSize[iScreen].cy;
-            rc = TRUE;
-        }
-        else
-            rc = vboxGetDisplayChangeRequest(pScrn, &x, &y, &bpp, &iScreen);
-        /* If we don't find a display request, see if we have a saved hint
-         * from a previous session. */
-        if (!rc || (0 == x) || (0 == y))
-            rc = vboxRetrieveVideoMode(pScrn, &x, &y, &bpp);
-        if (rc && (0 != x) && (0 != y))
-            vbox_output_add_mode(pVBox, &pModes, NULL, x, y, TRUE, FALSE);
-    }
+    uint32_t x, y, bpp, iScreen;
+    iScreen = (uintptr_t)output->driver_private;
+    vboxGetPreferredMode(pScrn, iScreen, &x, &y, &bpp);
+    vbox_output_add_mode(pVBox, &pModes, NULL, x, y, TRUE, FALSE);
+
     /* Also report any modes the user may have requested in the xorg.conf
      * configuration file. */
     for (i = 0; pScrn->display->modes[i] != NULL; i++)
     {
-        int x, y;
-        if (2 == sscanf(pScrn->display->modes[i], "%dx%d", &x, &y))
+        if (2 == sscanf(pScrn->display->modes[i], "%ux%u", &x, &y))
             vbox_output_add_mode(pVBox, &pModes, pScrn->display->modes[i], x, y,
                                  FALSE, TRUE);
@@ -877,5 +860,5 @@
         uint32_t cx = 0, cy = 0, cBits = 0;
 
-        vboxGetPreferredMode(pScrn, &cx, &cy, &cBits);
+        vboxGetPreferredMode(pScrn, 0, &cx, &cy, &cBits);
         /* We only support 16 and 24 bits depth (i.e. 16 and 32bpp) */
         if (cBits != 16)
@@ -1046,5 +1029,5 @@
     pVBox->vtSwitch = FALSE;
 
-    if (vbox_device_available(pVBox) && vbox_open (pScrn, pScreen, pVBox)) {
+    if (vbox_open (pScrn, pScreen, pVBox)) {
         vboxEnableVbva(pScrn);
         vboxEnableGraphicsCap(pVBox);
@@ -1324,6 +1307,5 @@
             vboxEnableGraphicsCap(pVBox);
     }
-    if (    vbox_device_available(pVBox)
-        && (pVBox->fHaveHGSMI)
+    if (   (pVBox->fHaveHGSMI)
         && !pVBox->vtSwitch)
         VBoxHGSMIProcessDisplayInfo(&pVBox->guestCtx, cDisplay, x, y,
Index: /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.h
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.h	(revision 35206)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.h	(revision 35207)
@@ -259,6 +259,7 @@
 extern Bool vboxSaveVideoMode(ScrnInfoPtr pScrn, uint32_t cx, uint32_t cy, uint32_t cBits);
 extern Bool vboxRetrieveVideoMode(ScrnInfoPtr pScrn, uint32_t *pcx, uint32_t *pcy, uint32_t *pcBits);
-extern void vboxGetPreferredMode(ScrnInfoPtr pScrn, uint32_t *pcx,
-                                 uint32_t *pcy, uint32_t *pcBits);
+extern void vboxGetPreferredMode(ScrnInfoPtr pScrn, uint32_t iScreen,
+                                 uint32_t *pcx, uint32_t *pcy,
+                                 uint32_t *pcBits);
 extern void vboxWriteHostModes(ScrnInfoPtr pScrn, DisplayModePtr pCurrent);
 extern void vboxAddModes(ScrnInfoPtr pScrn, uint32_t cxInit,
