Index: libs/libmythtv/osdsurface.h
===================================================================
--- libs/libmythtv/osdsurface.h	(revision 12769)
+++ libs/libmythtv/osdsurface.h	(working copy)
@@ -24,6 +24,7 @@
 
     void Clear(void);
     void ClearUsed(void);
+    bool IsClear(void) const;
 
     bool IntersectsDrawn(QRect &newrect);
     void AddRect(QRect &newrect);
@@ -35,7 +36,7 @@
         if (change) 
             ++revision;
     }
-    int GetRevision() { return revision; }
+    int GetRevision(void) const { return revision; }
 
     void BlendToYV12(unsigned char *yptr,
                      unsigned char *uptr,
Index: libs/libmythtv/osd.h
===================================================================
--- libs/libmythtv/osd.h	(revision 12769)
+++ libs/libmythtv/osd.h	(working copy)
@@ -60,6 +60,8 @@
 
     OSDSurface *Display(void);
 
+    int  GetRevision(void) const;
+
     void ClearAll(const QString &name);
     void ClearAllText(const QString &name);
     void SetText(const QString &name, QMap<QString, QString> &infoMap,
Index: libs/libmythtv/videoout_xv.cpp
===================================================================
--- libs/libmythtv/videoout_xv.cpp	(revision 12769)
+++ libs/libmythtv/videoout_xv.cpp	(working copy)
@@ -2859,9 +2859,7 @@
         VideoFrame *osdframe = NULL;
         int ret = DisplayOSD(xvmc_osd->OSDFrame(), osd, -1,
                              xvmc_osd->GetRevision());
-        OSDSurface *osdsurf = osd->Display();
-        if (osdsurf)
-            xvmc_osd->SetRevision(osdsurf->GetRevision());
+        xvmc_osd->SetRevision(osd->GetRevision());
         if (ret >= 0 && xvmc_osd->NeedFrame())
         {
             // If there are no available buffer, try to toss old
Index: libs/libmythtv/osdsurface.cpp
===================================================================
--- libs/libmythtv/osdsurface.cpp	(revision 12769)
+++ libs/libmythtv/osdsurface.cpp	(working copy)
@@ -135,6 +135,11 @@
     usedRegions = QRegion();
 }
 
+bool OSDSurface::IsClear(void) const
+{
+    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: libs/libmythtv/osd.cpp
===================================================================
--- libs/libmythtv/osd.cpp	(revision 12769)
+++ libs/libmythtv/osd.cpp	(working copy)
@@ -2474,6 +2474,13 @@
     totalfadetime = 0;
 }
 
+int OSD::GetRevision(void) const
+{
+    if (drawSurface)
+        return drawSurface->GetRevision();
+    return 0;
+}
+
 OSDSurface *OSD::Display(void)
 {
     bool anytodisplay = false;
@@ -2545,7 +2552,7 @@
 
     m_setsvisible = anytodisplay;
 
-    if (m_setsvisible)
+    if (m_setsvisible && !drawSurface->IsClear())
         return drawSurface;
 
     return NULL;

