Index: trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
===================================================================
--- trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c	(revision 45150)
+++ trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c	(revision 45159)
@@ -2409,11 +2409,4 @@
     cr_server.head_spu->dispatch_table.WindowVisibleRegion(pMI->spuWindow, cRects, pRects);
 
-    if (pMI->pvOutputRedirectInstance)
-    {
-        /* @todo the code assumes that RTRECT == four GLInts. */
-        cr_server.outputRedirect.CRORVisibleRegion(pMI->pvOutputRedirectInstance,
-                                                   cRects, pRects);
-    }
-
     pMI->fRootVrOn = cr_server.fRootVrOn;
 
Index: trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.c
===================================================================
--- trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.c	(revision 45150)
+++ trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.c	(revision 45159)
@@ -87,4 +87,14 @@
         if (mural->pvOutputRedirectInstance)
         {
+            uint32_t cRects;
+            const RTRECT *pRects;
+
+            int rc = CrVrScrCompositorEntryRegionsGet(&mural->Compositor, &mural->CEntry, &cRects, NULL, &pRects);
+            if (!RT_SUCCESS(rc))
+            {
+                crWarning("CrVrScrCompositorEntryRegionsGet failed, rc %d", rc);
+                return;
+            }
+
             cr_server.outputRedirect.CRORGeometry(mural->pvOutputRedirectInstance,
                                                   mural->hX, mural->hY,
Index: trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_window.c
===================================================================
--- trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_window.c	(revision 45150)
+++ trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_window.c	(revision 45159)
@@ -130,11 +130,4 @@
                 /* do visible rects only ig they differ from the default */
                 cr_server.head_spu->dispatch_table.WindowVisibleRegion(mural->spuWindow, cRects, pRects);
-
-                if (mural->pvOutputRedirectInstance)
-                {
-                    /* @todo the code assumes that RTRECT == four GLInts. */
-                    cr_server.outputRedirect.CRORVisibleRegion(mural->pvOutputRedirectInstance,
-                                                               cRects, pRects);
-                }
             }
         }
@@ -558,7 +551,16 @@
         if (mural->pvOutputRedirectInstance)
         {
+            if (mural->fRootVrOn)
+            {
+                rc = CrVrScrCompositorEntryRegionsGet(&mural->Compositor, &mural->CEntry, &cRects, NULL, &pRects);
+                if (!RT_SUCCESS(rc))
+                {
+                    crWarning("CrVrScrCompositorEntryRegionsGet failed, rc %d", rc);
+                    return;
+                }
+            }
             /* @todo the code assumes that RTRECT == four GLInts. */
             cr_server.outputRedirect.CRORVisibleRegion(mural->pvOutputRedirectInstance,
-                                                       cRects, (RTRECT *)pRects);
+                    cRects, pRects);
         }
 
@@ -648,11 +650,4 @@
                 {
                     cr_server.head_spu->dispatch_table.WindowVisibleRegion(mural->spuWindow, cRects, pRects);
-
-                    if (mural->pvOutputRedirectInstance)
-                    {
-                        /* @todo the code assumes that RTRECT == four GLInts. */
-                        cr_server.outputRedirect.CRORVisibleRegion(mural->pvOutputRedirectInstance,
-                                                                   cRects, pRects);
-                    }
                 }
                 else
@@ -727,4 +722,7 @@
     if (fRegionsChanged)
     {
+        const RTRECT * pRealRects;
+        uint32_t cRealRects;
+
         if (mural->fRootVrOn)
         {
@@ -744,5 +742,5 @@
             }
 
-            rc = CrVrScrCompositorEntryRegionsGet(&mural->RootVrCompositor, &mural->RootVrCEntry, &cRects, NULL, (const RTRECT **)&pRects);
+            rc = CrVrScrCompositorEntryRegionsGet(&mural->RootVrCompositor, &mural->RootVrCEntry, &cRealRects, NULL, &pRealRects);
             if (!RT_SUCCESS(rc))
             {
@@ -753,5 +751,5 @@
         else
         {
-            rc = CrVrScrCompositorEntryRegionsGet(&mural->Compositor, &mural->CEntry, &cRects, NULL, (const RTRECT **)&pRects);
+            rc = CrVrScrCompositorEntryRegionsGet(&mural->Compositor, &mural->CEntry, &cRealRects, NULL, &pRealRects);
             if (!RT_SUCCESS(rc))
             {
@@ -761,11 +759,19 @@
         }
 
-        cr_server.head_spu->dispatch_table.WindowVisibleRegion(mural->spuWindow, cRects, pRects);
+        cr_server.head_spu->dispatch_table.WindowVisibleRegion(mural->spuWindow, cRealRects, pRealRects);
 
         if (mural->pvOutputRedirectInstance)
         {
+            if (mural->fRootVrOn)
+            {
+                rc = CrVrScrCompositorEntryRegionsGet(&mural->Compositor, &mural->CEntry, &cRealRects, NULL, &pRealRects);
+                if (!RT_SUCCESS(rc))
+                {
+                    crWarning("CrVrScrCompositorEntryRegionsGet failed, rc %d", rc);
+                    return;
+                }
+            }
             /* @todo the code assumes that RTRECT == four GLInts. */
-            cr_server.outputRedirect.CRORVisibleRegion(mural->pvOutputRedirectInstance,
-                                                       cRects, (RTRECT *)pRects);
+            cr_server.outputRedirect.CRORVisibleRegion(mural->pvOutputRedirectInstance, cRealRects, pRealRects);
         }
     }
