Index: /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c	(revision 35615)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c	(revision 35616)
@@ -279,5 +279,17 @@
 static void
 vbox_crtc_dpms(xf86CrtcPtr crtc, int mode)
-{ (void) crtc; (void) mode; }
+{
+    VBOXPtr pVBox = VBOXGetRec(crtc->scrn);
+    unsigned cDisplay = (uintptr_t)crtc->driver_private;
+    TRACE_LOG("cDisplay=%u, mode=%i\n", cDisplay, mode);
+    pVBox->afDisabled[cDisplay] = (mode != DPMSModeOn);
+    if (   pVBox->aScreenLocation[cDisplay].cx
+        && pVBox->aScreenLocation[cDisplay].cy)
+        VBOXSetMode(crtc->scrn, cDisplay,
+                    pVBox->aScreenLocation[cDisplay].cx,
+                    pVBox->aScreenLocation[cDisplay].cy,
+                    pVBox->aScreenLocation[cDisplay].x,
+                    pVBox->aScreenLocation[cDisplay].y);
+}
 
 static Bool
@@ -300,9 +312,11 @@
     (void) mode;
     VBOXPtr pVBox = VBOXGetRec(crtc->scrn);
+    unsigned cDisplay = (uintptr_t)crtc->driver_private;
 
     TRACE_LOG("name=%s, HDisplay=%d, VDisplay=%d, x=%d, y=%d\n", adjusted_mode->name,
            adjusted_mode->HDisplay, adjusted_mode->VDisplay, x, y);
-    VBOXSetMode(crtc->scrn, (uintptr_t)crtc->driver_private,
-                adjusted_mode->HDisplay, adjusted_mode->VDisplay, x, y);
+    pVBox->afDisabled[cDisplay] = false;
+    VBOXSetMode(crtc->scrn, cDisplay, adjusted_mode->HDisplay,
+                adjusted_mode->VDisplay, x, y);
     /* Don't remember any modes set while we are seamless, as they are
      * just temporary. */
@@ -1132,9 +1146,17 @@
     pVBox->CloseScreen = pScreen->CloseScreen;
     pScreen->CloseScreen = VBOXCloseScreen;
+#ifdef VBOXVIDEO_13
+    pScreen->SaveScreen = xf86SaveScreen;
+#else
     pScreen->SaveScreen = VBOXSaveScreen;
-
+#endif
+
+#ifdef VBOXVIDEO_13
+    xf86DPMSInit(pScreen, xf86DPMSSet, 0);
+#else
     /* We probably do want to support power management - even if we just use
        a dummy function. */
     xf86DPMSInit(pScreen, VBOXDisplayPowerManagementSet, 0);
+#endif
 
     /* Report any unused options (only for the first generation) */
@@ -1164,7 +1186,7 @@
     cbOldFB = pVBox->cbLine * pScrn->virtualX;
     cbNewFB = vboxLineLength(pScrn, cNewX) * cNewY;
-    if (cbOldFB > pVBox->cbFBMax)
+    if (cbOldFB > (uint64_t)pVBox->cbFBMax)
         cbOldFB = 0;
-    if (cbNewFB > pVBox->cbFBMax)
+    if (cbNewFB > (uint64_t)pVBox->cbFBMax)
         cbNewFB = 0;
     memset(pVBox->base, 0, max(cbOldFB, cbNewFB));
@@ -1298,5 +1320,5 @@
 {
     VBOXPtr pVBox = VBOXGetRec(pScrn);
-    Bool rc = TRUE, fActive = TRUE;
+    Bool rc = TRUE, fActive = !pVBox->afDisabled[cDisplay];
     uint32_t offStart, cwReal = cWidth;
 
@@ -1320,4 +1342,6 @@
     else
         cwReal = RT_MIN((int) cWidth, pScrn->displayWidth - x);
+    TRACE_LOG("pVBox->afDisabled[cDisplay]=%d, fActive=%d\n",
+              (int)pVBox->afDisabled[cDisplay], (int)fActive);
     /* Don't fiddle with the hardware if we are switched
      * to a virtual terminal. */
Index: /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.h
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.h	(revision 35615)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.h	(revision 35616)
@@ -212,4 +212,6 @@
      * sending dirty rectangle information to the right one. */
     RTRECT2 aScreenLocation[VBOX_VIDEO_MAX_SCREENS];
+    /** Has this screen been disabled by the guest? */
+    Bool afDisabled[VBOX_VIDEO_MAX_SCREENS];
 #ifdef VBOXVIDEO_13
     /** The virtual crtcs */
