Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h	(revision 51319)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h	(revision 51320)
@@ -410,5 +410,6 @@
 HCR_FRAMEBUFFER CrPMgrFbGetFirstEnabled();
 HCR_FRAMEBUFFER CrPMgrFbGetNextEnabled(HCR_FRAMEBUFFER hFb);
-HCR_FRAMEBUFFER CrPMgrFbGetEnabled(uint32_t idScreen);
+HCR_FRAMEBUFFER CrPMgrFbGetEnabled(uint32_t idFb);
+HCR_FRAMEBUFFER CrPMgrFbGetEnabledForScreen(uint32_t idScreen);
 int CrPMgrModeVrdp(bool fEnable);
 int CrPMgrModeRootVr(bool fEnable);
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c	(revision 51319)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c	(revision 51320)
@@ -4180,5 +4180,5 @@
 static DECLCALLBACK(bool) crVBoxServerHasDataForScreen(uint32_t u32ScreenID)
 {
-    HCR_FRAMEBUFFER hFb = CrPMgrFbGetEnabled(u32ScreenID);
+    HCR_FRAMEBUFFER hFb = CrPMgrFbGetEnabledForScreen(u32ScreenID);
     if (hFb)
         return CrFbHas3DData(hFb);
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.cpp	(revision 51319)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.cpp	(revision 51320)
@@ -651,5 +651,5 @@
 DECLEXPORT(int) crServerVBoxScreenshotGet(uint32_t u32Screen, uint32_t width, uint32_t height, uint32_t pitch, void *pvBuffer, CR_SCREENSHOT *pScreenshot)
 {
-    HCR_FRAMEBUFFER hFb = CrPMgrFbGetEnabled(u32Screen);
+    HCR_FRAMEBUFFER hFb = CrPMgrFbGetEnabledForScreen(u32Screen);
     if (!hFb)
         return VERR_INVALID_STATE;
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp	(revision 51319)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp	(revision 51320)
@@ -156,5 +156,5 @@
 /* FRAMEBUFFER */
 
-void CrFbInit(CR_FRAMEBUFFER *pFb, uint32_t idScreen)
+void CrFbInit(CR_FRAMEBUFFER *pFb, uint32_t idFb)
 {
     RTRECT Rect;
@@ -165,5 +165,5 @@
     memset(pFb, 0, sizeof (*pFb));
     pFb->ScreenInfo.u16Flags = VBVA_SCREEN_F_DISABLED;
-    pFb->ScreenInfo.u32ViewIndex = idScreen;
+    pFb->ScreenInfo.u32ViewIndex = idFb;
     CrVrScrCompositorInit(&pFb->Compositor, &Rect);
     RTListInit(&pFb->EntriesList);
@@ -957,5 +957,5 @@
         return;
     }
-    uint32_t idScreen = pFb->ScreenInfo.u32ViewIndex;
+    uint32_t idFb = pFb->ScreenInfo.u32ViewIndex;
 
     CrVrScrCompositorClear(&pFb->Compositor);
@@ -968,5 +968,5 @@
 
     pFb->ScreenInfo.u16Flags = VBVA_SCREEN_F_DISABLED;
-    pFb->ScreenInfo.u32ViewIndex = idScreen;
+    pFb->ScreenInfo.u32ViewIndex = idFb;
 }
 
@@ -3937,44 +3937,44 @@
 }
 
-HCR_FRAMEBUFFER CrPMgrFbGet(uint32_t idScreen)
-{
-    if (idScreen >= CR_MAX_GUEST_MONITORS)
-    {
-        WARN(("invalid idScreen %d", idScreen));
+HCR_FRAMEBUFFER CrPMgrFbGet(uint32_t idFb)
+{
+    if (idFb >= CR_MAX_GUEST_MONITORS)
+    {
+        WARN(("invalid idFb %d", idFb));
         return NULL;
     }
 
-    if (!CrFBmIsSet(&g_CrPresenter.FramebufferInitMap, idScreen))
-    {
-        CrFbInit(&g_CrPresenter.aFramebuffers[idScreen], idScreen);
-        CrFBmSetAtomic(&g_CrPresenter.FramebufferInitMap, idScreen);
+    if (!CrFBmIsSet(&g_CrPresenter.FramebufferInitMap, idFb))
+    {
+        CrFbInit(&g_CrPresenter.aFramebuffers[idFb], idFb);
+        CrFBmSetAtomic(&g_CrPresenter.FramebufferInitMap, idFb);
     }
     else
-        Assert(g_CrPresenter.aFramebuffers[idScreen].ScreenInfo.u32ViewIndex == idScreen);
-
-    return &g_CrPresenter.aFramebuffers[idScreen];
-}
-
-HCR_FRAMEBUFFER CrPMgrFbGetInitialized(uint32_t idScreen)
-{
-    if (idScreen >= CR_MAX_GUEST_MONITORS)
-    {
-        WARN(("invalid idScreen %d", idScreen));
+        Assert(g_CrPresenter.aFramebuffers[idFb].ScreenInfo.u32ViewIndex == idFb);
+
+    return &g_CrPresenter.aFramebuffers[idFb];
+}
+
+HCR_FRAMEBUFFER CrPMgrFbGetInitialized(uint32_t idFb)
+{
+    if (idFb >= CR_MAX_GUEST_MONITORS)
+    {
+        WARN(("invalid idFb %d", idFb));
         return NULL;
     }
 
-    if (!CrFBmIsSet(&g_CrPresenter.FramebufferInitMap, idScreen))
+    if (!CrFBmIsSet(&g_CrPresenter.FramebufferInitMap, idFb))
     {
         return NULL;
     }
     else
-        Assert(g_CrPresenter.aFramebuffers[idScreen].ScreenInfo.u32ViewIndex == idScreen);
-
-    return &g_CrPresenter.aFramebuffers[idScreen];
-}
-
-HCR_FRAMEBUFFER CrPMgrFbGetEnabled(uint32_t idScreen)
-{
-    HCR_FRAMEBUFFER hFb = CrPMgrFbGetInitialized(idScreen);
+        Assert(g_CrPresenter.aFramebuffers[idFb].ScreenInfo.u32ViewIndex == idFb);
+
+    return &g_CrPresenter.aFramebuffers[idFb];
+}
+
+HCR_FRAMEBUFFER CrPMgrFbGetEnabled(uint32_t idFb)
+{
+    HCR_FRAMEBUFFER hFb = CrPMgrFbGetInitialized(idFb);
 
     if(hFb && CrFbIsEnabled(hFb))
@@ -3982,4 +3982,19 @@
 
     return NULL;
+}
+
+HCR_FRAMEBUFFER CrPMgrFbGetEnabledForScreen(uint32_t idScreen)
+{
+    if (idScreen >= cr_server.screenCount)
+    {
+        WARN(("invalid target id"));
+        return NULL;
+    }
+
+    const CR_FBDISPLAY_INFO *pDpInfo = &g_CrPresenter.aDisplayInfos[idScreen];
+    if (pDpInfo->iFb < 0)
+        return NULL;
+
+    return CrPMgrFbGetEnabled(pDpInfo->iFb);
 }
 
@@ -5173,6 +5188,6 @@
 crServerDispatchVBoxTexPresent(GLuint texture, GLuint cfg, GLint xPos, GLint yPos, GLint cRects, const GLint *pRects)
 {
-    uint32_t idScreen = CR_PRESENT_GET_SCREEN(cfg);
-    if (idScreen >= CR_MAX_GUEST_MONITORS)
+    uint32_t idFb = CR_PRESENT_GET_SCREEN(cfg);
+    if (idFb >= CR_MAX_GUEST_MONITORS)
     {
         WARN(("Invalid guest screen"));
@@ -5180,5 +5195,5 @@
     }
 
-    HCR_FRAMEBUFFER hFb = CrPMgrFbGetEnabled(idScreen);
+    HCR_FRAMEBUFFER hFb = CrPMgrFbGetEnabled(idFb);
     if (!hFb)
     {
@@ -5519,6 +5534,6 @@
     {
         const VBVAINFOSCREEN *pScreen = CrFbGetScreenInfo(hFb);
-        Assert(pScreen->u32Width == width);
-        Assert(pScreen->u32Height == height);
+        Assert(!width || pScreen->u32Width == width);
+        Assert(!height || pScreen->u32Height == height);
 
         crServerDispatchVBoxTexPresent(hostId, pScreen->u32ViewIndex, pPos->x, pPos->y, cRects, (const GLint*)pRects);
@@ -5991,6 +6006,6 @@
     }
 
-    uint32_t idScreen = pFlip->Hdr.u.u8PrimaryID;
-    HCR_FRAMEBUFFER hFb = CrPMgrFbGetEnabled(idScreen);
+    uint32_t idFb = pFlip->Hdr.u.u8PrimaryID;
+    HCR_FRAMEBUFFER hFb = CrPMgrFbGetEnabled(idFb);
     if (!hFb)
     {
@@ -6000,5 +6015,5 @@
 
     const RTRECT *pRect = CrVrScrCompositorRectGet(&hFb->Compositor);
-    crServerDispatchVBoxTexPresent(hostId, idScreen, 0, 0, 1, (const GLint*)pRect);
+    crServerDispatchVBoxTexPresent(hostId, idFb, 0, 0, 1, (const GLint*)pRect);
     return 0;
 }
