Index: libs/libmythtv/openglvideo.cpp
===================================================================
--- libs/libmythtv/openglvideo.cpp	(revision 12778)
+++ libs/libmythtv/openglvideo.cpp	(working copy)
@@ -145,6 +145,7 @@
         {
             inputTextures.push_back(yuv12tex);
             inputTextures.push_back(alphatex);
+            AddFilter(kGLFilterResize);
         }
     }
     else
@@ -804,6 +805,14 @@
         OpenGLFilterType type = it->first;
         OpenGLFilter *filter = it->second;
 
+        // skip colour conversion for osd already in frame buffer
+        if (!inputUpdated && type == kGLFilterYUV2RGBA)
+        {
+            inputs = filter->frameBufferTextures;
+            inputsize = videoSize;
+            continue;
+        }
+
         // skip colour conversion for frames already in frame buffer
         if (!inputUpdated && (frame == currentFrameNum) &&
             (type == kGLFilterYUV2RGB) && (frame != 0) &&
@@ -968,7 +977,7 @@
         }
 
         // enable blending for osd
-        if (type == kGLFilterYUV2RGBA)
+        if (type == kGLFilterResize && filters.count(kGLFilterYUV2RGBA))
             glEnable(GL_BLEND);
 
         // draw quad
@@ -980,7 +989,7 @@
         glEnd();
 
         // disable blending
-        if (type == kGLFilterYUV2RGBA)
+        if (type == kGLFilterResize && filters.count(kGLFilterYUV2RGBA))
             glDisable(GL_BLEND);
 
         // disable fragment program
Index: libs/libmythtv/videoout_xv.cpp
===================================================================
--- libs/libmythtv/videoout_xv.cpp	(revision 12778)
+++ libs/libmythtv/videoout_xv.cpp	(working copy)
@@ -284,6 +284,11 @@
                 gl_videochain->GetViewPort());
         }
 
+        if (gl_osdchain && gl_osdchain != NULL) 
+        {
+            gl_osdchain->SetMasterViewport(gl_videochain->GetViewPort());
+        }
+
         ok = CreateBuffers(VideoOutputSubType());
     }
 
@@ -1252,6 +1257,13 @@
             gl_osdchain = NULL;
             gl_use_osd_opengl2 = false;
         }
+        else 
+        {
+            if (gl_videochain && gl_videochain != NULL)
+            {
+                gl_osdchain->SetMasterViewport(gl_videochain->GetViewPort());
+            }
+        }
 
         gl_context->MakeCurrent(false);
     }
