Index: libs/libmythtv/osdtypeteletext.h
===================================================================
--- libs/libmythtv/osdtypeteletext.h	(revision 10247)
+++ libs/libmythtv/osdtypeteletext.h	(working copy)
@@ -15,6 +15,7 @@
 
 #include "osdtypes.h"
 #include "teletextdecoder.h"
+#include "osd.h"
 
 class TTFFont;
 class OSDType;
@@ -107,7 +108,7 @@
     Q_OBJECT
   public:
     OSDTypeTeletext(const QString &name, TTFFont *font,
-                    QRect displayrect, float wmult, float hmult);
+                    QRect displayrect, float wmult, float hmult, OSD *osd);
     OSDTypeTeletext(const OSDTypeTeletext &other)
         : OSDType(other.m_name), TeletextViewer() {}
     virtual ~OSDTypeTeletext() {}
@@ -184,6 +185,8 @@
 
     bool         m_displaying;
 
+    OSD          *m_osd;
+
     TeletextMagazine m_magazines[8];
     unsigned char    bitswap[256];
 
Index: libs/libmythtv/osd.h
===================================================================
--- libs/libmythtv/osd.h	(revision 10247)
+++ libs/libmythtv/osd.h	(working copy)
@@ -154,6 +154,9 @@
 
     void SetTextSubtitles(const QStringList&);
     void ClearTextSubtitles(void);
+
+    void SurfaceLock(void) { osdlock.lock(); };
+    void SurfaceUnlock(void) { osdlock.unlock(); };
  private:
     bool InitDefaults(void);
     bool InitCC608(void);
Index: libs/libmythtv/osdtypeteletext.cpp
===================================================================
--- libs/libmythtv/osdtypeteletext.cpp	(revision 10247)
+++ libs/libmythtv/osdtypeteletext.cpp	(working copy)
@@ -47,7 +47,8 @@
 
 /*****************************************************************************/
 OSDTypeTeletext::OSDTypeTeletext(const QString &name, TTFFont *font,
-                                 QRect displayrect, float wmult, float hmult)
+                                 QRect displayrect, float wmult, float hmult,
+                                 OSD *osd)
     : OSDType(name),
       m_displayrect(displayrect),       m_unbiasedrect(0,0,0,0),
       m_font(font),                     m_surface(NULL),
@@ -65,7 +66,7 @@
       m_curpage_showheader(true),       m_curpage_issubtitle(false),
 
       m_transparent(false),             m_revealHidden(false),
-      m_displaying(false)
+      m_displaying(false),              m_osd(osd)
 {
     m_unbiasedrect  = bias(m_displayrect, wmult, hmult);
 
@@ -184,8 +185,11 @@
     else 
     {
         memcpy(ttpage->data[0]+0, buf, 40);
-        memset(ttpage->data[0]+40, ' ', sizeof(ttpage->data)-40);
     }
+
+    memset(ttpage->data[0]+40, ' ', sizeof(ttpage->data)-40);           // once a page has been updated and displayed the
+                                                                        // data it contains should be erased for all VBI types
+                                                                        // (prior only erase if not VBI_DVB/VBI_DVB_SUBTITLE
     
     if ( !(ttpage->flags & TP_INTERRUPTED_SEQ)) 
         HeaderUpdated(ttpage->data[0],ttpage->lang);
@@ -316,9 +320,11 @@
 
     if (m_surface != NULL)
     {
+        m_osd->SurfaceLock();
         m_surface->SetChanged(true);
         m_surface->ClearUsed();
         DrawPage();
+        m_osd->SurfaceUnlock();
     }
 }
 
@@ -341,7 +347,11 @@
         return;
 
     if (m_surface != NULL)
+    {
+        m_osd->SurfaceLock();
         DrawHeader(page, lang);
+        m_osd->SurfaceUnlock();
+    }
 }
 
 /** \fn OSDTypeTeletext::FindPage(int, int)
Index: libs/libmythtv/osd.cpp
===================================================================
--- libs/libmythtv/osd.cpp	(revision 10247)
+++ libs/libmythtv/osd.cpp	(working copy)
@@ -269,7 +269,7 @@
     }
 
     OSDTypeTeletext *ttpage = new OSDTypeTeletext(
-        name, font, area, wmult, hmult);
+        name, font, area, wmult, hmult, this);
   
     container->AddType(ttpage);
     return true;
