Index: mythtv/libs/libmythtv/osdsurface.h
===================================================================
--- mythtv/libs/libmythtv/osdsurface.h	(revision 12541)
+++ mythtv/libs/libmythtv/osdsurface.h	(working copy)
@@ -24,6 +24,7 @@
 
     void Clear(void);
     void ClearUsed(void);
+    bool IsClear();
 
     bool IntersectsDrawn(QRect &newrect);
     void AddRect(QRect &newrect);
Index: mythtv/libs/libmythtv/osd.h
===================================================================
--- mythtv/libs/libmythtv/osd.h	(revision 12541)
+++ mythtv/libs/libmythtv/osd.h	(working copy)
@@ -60,6 +60,8 @@
 
     OSDSurface *Display(void);
 
+    OSDSurface *GetDisplaySurface(void);
+
     void ClearAll(const QString &name);
     void ClearAllText(const QString &name);
     void SetText(const QString &name, QMap<QString, QString> &infoMap,
Index: mythtv/libs/libmythtv/videoout_xv.cpp
===================================================================
--- mythtv/libs/libmythtv/videoout_xv.cpp	(revision 12541)
+++ mythtv/libs/libmythtv/videoout_xv.cpp	(working copy)
@@ -2859,7 +2859,7 @@
         VideoFrame *osdframe = NULL;
         int ret = DisplayOSD(xvmc_osd->OSDFrame(), osd, -1,
                              xvmc_osd->GetRevision());
-        OSDSurface *osdsurf = osd->Display();
+        OSDSurface *osdsurf = osd->GetDisplaySurface();
         if (osdsurf)
             xvmc_osd->SetRevision(osdsurf->GetRevision());
         if (ret >= 0 && xvmc_osd->NeedFrame())
Index: mythtv/libs/libmythtv/osdsurface.cpp
===================================================================
--- mythtv/libs/libmythtv/osdsurface.cpp	(revision 12541)
+++ mythtv/libs/libmythtv/osdsurface.cpp	(working copy)
@@ -135,6 +135,11 @@
     usedRegions = QRegion();
 }
 
+bool OSDSurface::IsClear(void)
+{
+    return (usedRegions == QRegion());
+}
+
 bool OSDSurface::IntersectsDrawn(QRect &newrect)
 {
     QMutexLocker lock(&usedRegionsLock);
@@ -799,7 +804,7 @@
 
         if (startline < 0) startline = 0;
         if (endline >= height) endline = height - 1;
-        if (startcol < 0) endcol = 0;
+        if (startcol < 0) startcol = 0;
         if (endcol >= width) endcol = width - 1;
 
         unsigned char *src;
Index: mythtv/libs/libmythtv/osd.cpp
===================================================================
--- mythtv/libs/libmythtv/osd.cpp	(revision 12541)
+++ mythtv/libs/libmythtv/osd.cpp	(working copy)
@@ -2474,6 +2474,11 @@
     totalfadetime = 0;
 }
 
+OSDSurface *OSD::GetDisplaySurface(void)
+{
+    return drawSurface;
+}
+
 OSDSurface *OSD::Display(void)
 {
     bool anytodisplay = false;
@@ -2545,7 +2550,7 @@
 
     m_setsvisible = anytodisplay;
 
-    if (m_setsvisible)
+    if (m_setsvisible && !drawSurface->IsClear())
         return drawSurface;
 
     return NULL;

